[转]如何实现按键精灵的简单路点⾏⾛
转载⾃:
对于⼀个外挂来说,实现⾓⾊在地图上的⾃动⾏⾛,需要包括三个要素:⼀是到⼀条可以⾏⾛的路线,⼆是沿着到的路线⾏⾛,三是在移动过程中进⾏越障处理。
鼠标不动了怎么办
不过对于按键精灵制作的脚本来说,第⼀步⾃动判断⾏⾛路线的问题实在过于复杂,即使你破解了加密过的地图⽂件,取得了地图的每个坐标点的通⾏,阻塞信息,另外还有个关键的问题,就是在实际⾏⾛过程中,除了场景障碍外,还有怪物,其他玩家等活动物体,他们也是⼀种障碍物,⽽按键精灵对于这种活动物体的判断,是⽐较薄弱的。
如果你花⼤功夫在按键中解决了这个问题,恭喜你的同时我会认为这是不值得的,那样的话不如⽤⾼级开发语⾔和⼯具脱离按键做成⼀个完整的外挂软件。
所以怎么到可以⾏⾛的路线,本⽂并不会进⾏任何说明,有兴趣的可以去研究下 A *算法。本⽂所阐述的问题,是上⽂中提到的第⼆步,在已知达到⽬标的路线的情况下,怎样进⾏⾏⾛。
从A ⾛到 E 点,假设我们⾏⾛的路线是从 A - > B - > C - > D - > E,根据顺序依次经过 5个路点,且任意相邻两点间都是可以直线到达的。那么只要研究出如何从 A ⾛到 B,其他的点就可以根据相同的⽅法
来处理。
这⾥主要介绍三种基本⽅法。
1。单步⾏⾛
现在的游戏绝⼤多数都是始终以⼈物为中⼼的。只要将⿏标放在⾏⾛⽅向上,和⼈物相距⼀个坐标的位置上不动,反复点击,就可以⼀步⼀步的⾛到⽬标。
如图,⼈物在位置 1时,⿏标在位置 2,点击⿏标,⼈物⾏⾛到位置 2 后,⿏标不动,但在画⾯上其实已经指向位置 3了,判断当前的坐标,如果仍未达到终点,就继续点击⿏标。这样多次循环,就能到达⽬的地。
这种⾏⾛⽅法只需知道⽅向就可以了,但它的每⼀步都必须是最⼩的,即⼀个游戏坐标长度,否则可能就会达不到或者超过⽬的地。
2。分步⾏⾛
单步⾏⾛的⽅法⽆疑是⽐较落后的,每⾛⼀步,都必须判断是否达到终点,反复判断坐标的过程肯定会增加⾏⾛时间。所以很多⼈使⽤了另外⼀种⽅法,可称之为分步⾏⾛法:根据屏幕⼤⼩,设定⼀个步长 Step (当然不能超过屏幕了),每次最多⾏⾛这个步长的距离,把整个路程,分开为若⼲步来完成。
如图,假设出发点是原点,⽬的地坐标为( X,Y) ,那么实际路线长度就是 X 的平⽅加上 Y的平⽅,如果这个长度⽐指定的步长 Step ⼤的话,就先⾛步长的距离,然后再以⾛到的点为出发原点,再次计算路线长度进⾏下⼀次判断;⼀旦判断⽐ Step ⼩,就直接⾛到终点。
3。分量分步⾏⾛法
现在的电脑屏幕⼀般是矩形的,⾼⽐宽短,再加上游戏画⾯下⽅⼀般有聊天输⼊框,选择菜单,⾎量显⽰,技能快捷等,纵向上就显得更加狭窄。上⾯介绍的分步⾏⾛法的步长,很⼤程度上都受到画⾯纵向⾼度的制约,相反在横向上,很⼤部分的屏幕都没有使⽤到。如图2中,灰⾊区域基本都集中在 X 轴⽅向上。
所以这⾥再介绍⼀种分量分步⾏⾛的⽅法,即分别设定 X 轴和 Y轴上的2种步长。如下图的 StepX 和 StepY,分别是横纵⽅向上能移动的最长的距离。在 StepY 和 StepX 形成的⼀个直⾓三⾓形中,假设⾓度为 θ。如果⾏⾛路线的⾓度⼩于 θ ,如红线路径,那么在屏幕上可以⾏⾛的最远点的坐标,就应
该以 StepX 为准,再计算出此点的 Y的坐标;反之,如果⼤于θ ,如黄线路径,就应该以 StepY 为准,再计算出 X 的坐标。等于 θ 的情况可以归于⼤于或者⼩于进⾏计算。如下图:
其中 θ ⾓⼤⼩,可以⽤它的正切值 StepY/ StepX 来判断。假设出发点为原点,⽬的地的坐标为 X ,Y
简要代码如下:
If    StepY/StepX >= Y/X
If StepX < X                    //与⽬的地的 X轴上的距离超过⼀个步长,计算下个移动点的坐标
NextX = StepX
NextY = StepX * Y /X
Else                                //与⽬的地的 X轴上的距离已经不超过⼀个步长,直接到达
NextX = X
NextY = Y
EndIf
ElseIf    StepY/StepX < Y/X
If StepY < Y                  //与⽬的地的 Y轴上的距离超过⼀个步长,计算下个移动点的坐标
NextY= StepY
NextX = StepY * X /Y
Else                                //与⽬的地的 Y轴上的距离已经不超过⼀个步长,直接到达
NextX = X
NextY = Y
EndIf
EndIf
这样⼀来就可以更⼤程度的利⽤屏幕,提⾼了效率。
写在最后的话:
上⾯介绍的3种⽅法,只是⽐较简要的说明,都是以⾏⾛路线在第⼀象限的情况进⾏分析的,如果要实际的使⽤在脚本中,必须考虑到 4个象限中的不同情况,以及游戏中坐标的表⽰⽅式,如有的游戏以地图左底点为原点,有的以左顶点为原点;另外如果有玩家站在关键路点上,该怎么办,如何越障,这些都是实际编写中要考虑到的。
-
---------------------------------------------------------
以上为转载,- -说实话,我也看不太明⽩,所以先放⾄⾃⼰的空间再慢慢研究了,- -这些原理对锁定坐标很有帮助