local x,y,w,h,m,hp,--x y 人物宽度 人物高度 敌人距离 敌人血量 ai,zy,dx,name,shtr--人机判断 人物动作 敌人队营 倒地血量 敌人名字 local rx,ry local hp_list={} local num_list={} local _fps,idx,id1,id2,_hp,t,__hp, 队伍颜色_0xff,队伍颜色_0xef,队伍颜色_0xaf_0_0x1,队伍颜色_0xef_0z1_0x1, y_w,y__w,w_2,_,瞄准,防呆 mDraw=LimoDrawable{--创建LuaDrawable对象 view=window,--设置图层控件 data=Split_Table, 调试模式=false,--分析错误日志并给出部分异常的解决方案 (发布前请关闭,否则将会影响帧率) onDraw=function(view,画布,画笔,self,fps,data)--控件对象 画布 画笔 LuaDrawable对象 获取FPS 内部数据表 if 绘制开关--控制是否绘制图形 _fps,_time=fps() if _fps>=50 setColor("FPS画笔",0xff00ff00) elseif _fps<30 setColor("FPS画笔",0xffff0000) else setColor("FPS画笔",0xFFFF7F00) end 画布.drawText(tostring(_fps),100,126,FPS画笔)--绘制FPS 画布.drawText("FPS",100,100,FPS画笔)--绘制FPS id1,id2=0,0--申明用于计算敌人数量的局部变量 自瞄圈范围调整=自瞄长度.getProgress() for str io.lines "/sdcard/b.log"--读取b.log的每一行 -- str=string.gsub(str,"\0-;-$","") string.split(str,",")--将分割后的字符串存入data x,y,w,h,m,hp,--x y 人物宽度 人物高度 敌人距离 敌人血量 ai,zy,dx,name,shtr=--人机判断 敌人队营 倒地血量 敌人名字 tonumber(data[1]),tonumber(data[2]), tonumber(data[3]),tonumber(data[4]), tointeger(data[5]),tonumber(data[6]), tonumber(data[7]),tonumber(data[8]), tonumber(data[9]),data[10], tonumber(data[11]) if x and y and w and h and m--因数据不是数字,tonumber返回nil and hp and ai and zy and dx and name--所以可以通过判断变量是否存在,过滤异常数据 y_w,y__w,w_2=y-w,y+w,w/2--缓存需要重复运算的数据 if ai==0 or zy==996--人机判断,适配了地铁模式 id2=id2+1--人机+1 else--真人 id1=id1+1--真人+1 end 防呆=not tonumber(name) 队伍颜色_0xff=随机颜色(zy) 队伍颜色_0xef=随机颜色(zy,0xef) 队伍颜色_0xef_0z1_0x1=随机颜色(zy,0xef,-0.1,0.1) 队伍颜色_0xaf_0_0x1=随机颜色(zy,0xaf,0,0.1) _hp=math.ceil(hp) if hp>100 __hp=100 elseif hp<0 __hp=0 else __hp=hp end if 击伤开关 and 防呆--击伤特效 if not hp_list[name] hp_list[name]={_hp,_time} end t=hp_list[name] if t if t[1]>_hp t[3]="-"..t[1]-_hp t[4]=0xFFff0000 t[5]=t[1] t[6]=x-126+(2.54*__hp)+45 t[7]=y_w-31 t[8]=x t[1]=_hp t[2]=_time if t[9] t[5]=t[10]-t[9] t[9],t[10]=nil end if t[5]>100 t[11]=100 elseif t[5]<0 t[11]=0 else t[11]=t[5] end if w>0 _={{t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8]}} for i=1,#num_list _[i+1]=num_list[i] end num_list=_ end elseif t[1]<_hp t[3]="+".._hp-t[1] t[4]=0xff00ef00 t[5]=t[1] t[6]=x-126+(2.54*__hp)+45 t[7]=y_w-31 t[8]=x t[1]=_hp t[2]=_time if t[9] t[5]=t[10]-t[9] t[9],t[10]=nil end if t[5]>100 t[11]=100 elseif t[5]<0 t[11]=0 else t[11]=t[5] end if w>0 _={{t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8]}} for i=1,#num_list _[i+1]=num_list[i] end num_list=_ end end end end if w>0--过滤掉背后的敌人 x=x+(w_2)--[[身位偏移 x坐标是以人物左侧为基准,而我以中间为基准计算的 所以需要在这里将坐标矫正,向右挪移半个身位]] if ai==0 or zy==996--人机判断,适配了地铁模式 if 绘制背敌 setColor("背敌画笔1",0xffffffff) setColor("背敌画笔2",0xef404040) setColor("背敌文字",0xef404040) end if 绘制方框 if y>height_2-w and ywidth_2-w_2 and xheight_2-w and ywidth_2-w_2 and xwidth--右侧背敌 if 绘制背敌 画布.drawRect(width,y-25,width-90,y+25,背敌画笔1) 画布.drawRect(width+1,y-25-1,width-91,y+25+1,背敌画笔2) 画布.drawText(m.."m",width-45,y+8,背敌文字) end elseif y__w<0--上方背敌 if 绘制背敌 画布.drawRect(x-45,0,x+45,50,背敌画笔1) 画布.drawRect(x-45-1,-1,x+45+1,51,背敌画笔2) 画布.drawText(m.."m",x,35,背敌文字) end else--敌人方框 if 绘制方框 if 瞄准 画布.drawRect(x-(w_2),y_w,x+(w_2),y__w,瞄准画笔)--绘制方框 else 画布.drawRect(x-(w_2),y_w,x+(w_2),y__w,方框画笔)--绘制方框 end end if 绘制信息 if ai==0 or zy==996--人机判断,适配了地铁模式 setColor("信息画笔",0xef505050) setColor("信息画笔2",0xef404040) else setColor("信息画笔",队伍颜色_0xef_0z1_0x1) setColor("信息画笔2",队伍颜色_0xff) end 画布.drawRect(x-130,y_w-66,x+130,y_w-27,信息画笔)--设置方框上方黑色背景的坐标 画布.drawRect(x-130,y_w-66,x-90,y_w-33,信息画笔2)--设置方框上方黑色背景的坐标 画布.drawText(tostring(zy),x-111,y_w-42,阵营画笔)--绘制队营文字 画布.drawText(m.."m",x+120,y_w-42,距离画笔)--绘制距离文字 画布.drawText(name,x,y_w-42,名字画笔)--绘制人物名字 if hp>100--适配地铁模式 setColor("血条画笔2",0xFF0000FF)--蓝色血条 画布.drawText(math.ceil(hp).."HP",x+140,y_w-41,血条画笔3)--文字血量 hp=100 elseif hp<=0--敌人倒地 setColor("血条画笔2",0xffff0000)--设置红色血条 hp=dx--设置敌人的倒地血量 else--健康血量 setColor("血条画笔2",0xFF00FF00)--设置绿色血条 end 画布.drawLine(x-126,y_w-31,x-126+(2.54*hp),y_w-31,血条画笔2)--绘制血条 if 击伤开关 and t and 防呆--击伤特效 if t[3] and _time-t[2]<=300 if t[5]>t[1] setColor("伤害画笔1",0xFFff0000) 画布.drawLine(x-126+(2.54*hp)+3,y_w-31,x-126+(2.54*(t[11]-((t[11]-hp)/300)*(_time-t[2]))),y_w-31,伤害画笔1) t[9]=((t[11]-t[1])/300)*(_time-t[2]) t[10]=t[11] end else t[9],t[10]=nil end end if 绘制射线 画布.drawLine(width_2,104,x,y_w-68,射线画笔)--绘制射线 end else if 绘制射线 画布.drawLine(width_2,104,x,y_w-26,射线画笔)--绘制射线 end end 画布.drawText("▼",x,y_w-7,名字画笔) end else--后方背敌 if 绘制背敌 if ai==0 or zy==996--人机判断,适配了地铁模式 setColor("背敌画笔1",0xffffffff) setColor("背敌画笔2",0xef404040) setColor("背敌文字",0xef404040) else--真人 setColor("背敌画笔1",队伍颜色_0xef) setColor("背敌画笔2",0xffffffff) setColor("背敌文字",0xffffffff) end 画布.drawRect(x-45,height,x+45,height-50,背敌画笔1) 画布.drawRect(x-45-1,height-1,x+45+1,height-51,背敌画笔2) 画布.drawText(m.."m",x,height-20,背敌文字) end end end --table.clear(data)--清空data,如要开启调试模式,建议取消注释 end if 自瞄圈开关 then 画布.drawCircle(width_2,height_2, 自瞄圈范围调整 ,自瞄圈画笔) -- if shtr<=自瞄圈范围调整 then -- 画布.drawLine(width_2,height_2,shtr,shtr ,射线画笔) -- -- print(shtr) -- end end if 击伤开关 and t--击伤特效 for i=#num_list,1,-1 local _=num_list local t=num_list[i] if t if t[3] and _time-t[2]<=1000 setColor("伤害画笔1",t[4]) 伤害画笔1.setAlpha((255/1000)*(1000-(_time-t[2]))) 伤害画笔2.setAlpha((255/1000)*(1000-(_time-t[2]))) 画布.drawText(t[3],t[6],t[7]-35-((100/1000)*(_time-t[2])),伤害画笔1) 画布.drawText(t[3],t[6],t[7]-35-((100/1000)*(_time-t[2])),伤害画笔2) else _[i]=nil end end end end if id1==0 setColor("人数画笔1",0xfF07BE2E) 画布.drawRect((width_2)-60,55,width_2,100,人数画笔1)--绘制人数的背景 画布.drawText("0",width_2-30,87.5,人数画笔2) else setColor("人数画笔1",0xFFFF193F) 画布.drawRect((width_2)-60,55,width_2,100,人数画笔1)--绘制人数的背景 画布.drawText(tostring(id1),width_2-30,87.5,人数画笔2) end if id2==0 setColor("人数画笔1",0xfF07BE2E) 画布.drawRect((width_2)+60,55,width_2,100,人数画笔1)--绘制人数的背景 画布.drawText("0",width_2+30,87.5,人数画笔2) else setColor("人数画笔1",0xFFFF8100) 画布.drawRect((width_2)+60,55,width_2,100,人数画笔1)--绘制人数的背景 画布.drawText(tostring(id2),width_2+30,87.5,人数画笔2) end if 绘制准星 画布.drawCircle(width_2,height_2,4,准星画笔)--绘制红色准星 end end end }