按键精灵 脚本怎么用 教你写手游脚本:打造非常实用的多点找色函数
前言
经过前面2篇文章的学习理解,相信大家对游戏脚本有了一定的了解。今天我们就基于按键精灵的多点找色函数打造适用于我们自己的找色函数。
按键精灵的多点找色函数
/*这是按键精灵自身的多点找色函数,原理就是根据你提供的颜色描述去对找当前屏幕像素,
和指定的颜色进行对比,找到了就返回指定颜色的坐标,没找到就返回 -1, -1
x1,y1 : 要找区域左上角坐标
x2,y2 : 要找区域右下角坐标
first_color : 要对比的颜色,就是参考颜色,也是要返回的坐标颜色
offset_color : 要比对的多个点的颜色描述
dir : 查找方向,一般默认0,从左上到右下
sim : 对比相似度,一般默认0.9,再大不容易找到,太小容易找错
intX,intY : 返回的坐标
*/
Dim intX, intY
FindMultiColor(x1, y1, x2, y2, first_color, offset_color, dir, sim, intX, intY)
按键精灵给我们提供的这个函数只能满足基本需求,对我们而言还远远不够,我们期望能结合我们之前打造的点击函数结合起来进行使用。
开始打造非常棒的多点找色函数
初级设计:把多点找色当做判断条件
顾名思义,就是通过多点找色返回bool值,如果返回true我们做什么,如果返回false我们做什么,这样把函数当做判断条件会方便我们进行更多的动作。
//多点找色并返回真假
Function multiFindColor(x1, y1, x2, y2, first_color, offset_color)
Dim intX, intY //定义2个变量
KeepCapture //截图保存至内存中,大幅度提升找色速度
FindMultiColor(x1, y1, x2, y2, first_color, offset_color, 0, 0.9, intX, intY) //固定寻找方向和相似度
ReleaseCapture //释放内存中的图片
If intX > -1 Then
//点返回值大于-1说明找到坐标,函数返回真
multiFindColor = true
Else
multiFindColor = false
End If
End Function
实例:找雷电中心
寻找雷电游戏中心
复制右侧的"选取范围"内容和"多点找色-颜色描述"的内容
//打印函数返回内容
TracePrint multiFindColor(230, 207, 323, 294, "1FC5F4", "0|-13|000000,-23|-37|1FC5F4,22|-31|1FC5F4,1|-15|000000")
进阶设计:需要返回坐标方便我们配合点击函数
有时候我们找到了目标,还希望能把那个目标的坐标值也给我们,方便我们调用click函数,这时候我们需要再造一个能返回坐标的函数。
疑惑1:为什么我没有把点击函数写入找色函数里面?
为了解除函数与函数之间的耦合性,或者说达到一个松耦合的效果,什么叫耦合?就是相互关联性,一个独立的函数适用性远远大于一个关联紧密的函数。
疑惑2:这么设计有什么好处?
假设你想要找的目标是右上角,而你要点击的地方是左下角,这时候使用这个函数就非常棒按键精灵 脚本怎么用,我们只要专注找色就是找色,点击就是点击就可以了。
/*多点找色并返回坐标
x1,y1 : 要找区域左上角坐标
x2,y2 : 要找区域右下角坐标
first_color : 要对比的颜色,就是参考颜色,也是要返回的坐标颜色
offset_color : 要比对的多个点的颜色描述
*/
Function colorPoint(x1, y1, x2, y2, first_color, offset_color)
Dim intX, intY, retArray //定义3个变量
KeepCapture //截图保存至内存中,大幅度提升找色速度
FindMultiColor(x1, y1, x2, y2, first_color, offset_color, 0, 0.9, intX, intY) //固定寻找方向和相似度
ReleaseCapture //释放内存中的图片
If intX > -1 Then
//找到目标返回数组
retArray = Array(intX, intY)
Else
//没找到目标返回-1,-1
retArray = Array(-1, -1)
End If
//返回retArray数组
colorPoint = retArray
End Function
//根据返回坐标数组进行点击动作
Dim ret, x, y
//用上面雷电的特征信息做例子
ret = colorPoint(230, 207, 323, 294, "1FC5F4", "0|-13|000000,-23|-37|1FC5F4,22|-31|1FC5F4,1|-15|000000")
x = ret(0)
y = ret(1)
//TracePrint x,y
click(x + 60, y + 350, 5) //最后点击了剪映