1、渐开线

3、游戏里的规律咱们今天讲的例子是2D游戏《神涂》。渐开线要怎么应用到游戏找怪呢?咱们咸犴孜稍先了解下游戏里的规律,再将渐开线套用进去。规律1:在2D游戏里,姹州比蹼角色、怪物移动的距离是固定的,就像走在棋盘里一样,移动一步就像走了一个格子。在今天的游戏例子中,角色、怪物横着走一步是48个像素点,竖着走一步是32个像素点。(不是所有2D游戏都是这样的规格)

6、经过图片的分析,情况一目了然。以角色为中心,一圈圈往外扩散,不正是渐开线么。
7、渐开线找怪思路1、以角色右边一格为渐开线起始点,一圈圈往外遍历格子。(不一定要角色右边一格为起始点,上下左右都可以,不要以角色为起点即可。因为咱们的角色血条也是红的,如果从角色那一格开始遍历,那么一开始就找到角色自己的血条。)

10、第一步,以角色右边一格为渐开线起始点,也就是说x坐标要加48个像素。以角色为中心点,往上移动y坐标递减,往下移动y坐标递增。往左移动x坐标递减,往右移动x坐标递增。
11、第1个格子到第二个格子,y坐标加32个像素。现在问题来了,第2格到第3个要转弯,怎么转弯呢?

14、结合代码进行理解:步数=1For16//烂瘀佐栾这里的数字越大,渐开线范围越大For2//转向For步数NextNext步数租涫疼迟=步数+1Next初始步数为1,for2循环有循环两次。第一次,角色转向进入for步数循环往右走一格(上图中白色格子)。第二次,角色转向进入for步数循环往下走一格。for2循环执行完毕,步数加1再次进入for2循环。第一次,角色转向进入for步数循环往左走两格(上图中嫩绿色格子)。第二次,角色转向进入for步数循环往上走两格。for2循环执行完毕,步数加1再次进入for2循环。依此类推。
15、整体代码Call随机打怪()Function随机打怪()px=497-9py=279-15//497荑樊综鲶,279为角色血条的第一个像素点'/*渐开找怪Do坐标X=0坐标Y=0朝向=0//[0=上、1=右、2=下、3=左]步数=1有怪=falseFor16For2朝向=朝向+1For步数SelectCaseAbs(朝向mod4)Case0坐标Y=坐标Y-1Case1坐标X=坐标X+1Case2坐标Y=坐标Y+1Case3坐标X=坐标X-1EndSelectIf有怪=FalseThenXY=Plugin.Color.FindMultiColor(px+(坐标x*48),py+(坐标y*32),px+((坐标x+1)*48),py+((坐标y+1)*32),"FF0000","0|1|9C0000",1)ZB=InStr(XY,"|")intX=Clng(Left(XY,ZB-1)):intY=Clng(Right(XY,Len(XY)-ZB))IfIntX>=0ThenMoveToIntX+16,IntY+46LeftClick1有怪=TRUEEndIfEndIfNextNext步数=步数+1NextDelay1000//判断是否要使用随机传送了If有怪=FalseThenKeyPress"3",1Delay1000EndIfLoopEndFunctionfont-fa� :��؍��; color:rgb(68,68,68); font-size:10px; mso-font-kerning:1px; " >/////////////注册大漠插件///////////Sub大漠注册()Setws=createobject("Wscript.Shell")ws.run"regsvr32atl.dll/s"Setws=nothingPutAttachment"c:\guoer","dm.dll"PutAttachment".\Plugin","RegDll.dll"callPlugin.RegDll.Reg("c:\guoer\dm.dll")Setdm=createobject("dm.dmsoft")ver=dm.ver()Iflen(ver)=0ThenMessageBox"插件注册失败,检查系统是否禁用了vbs脚本权限"EndScriptEndIfEndSub
16、注意:px=497-9py=279-15//497,279为角色血条的第一个像素点为什么在这里要减9减15呢?

18、然后,使用区域多点找色,在格子范围内查找血条,这样高的怪物的血条就不会超出格子范围。