事情的起因是在美团里面看到了这样一个游戏 一起打地鼠 我去试玩了一下,果然,手残的我只有一百多分.这怎么能忍,开始尝试写脚本,同时就当做学习autojs里面的找色找图函数了
1,设计思路
首先通过试玩,我发现是有炸弹作为干扰的,同时,会出现增加时间的道具(个人觉得这个不能浪费要吃),
然后思路,一开始我是准备判断特定点颜色来进行点击的,但是地鼠移动太快,我不好找色,同时也担心单点找色误判率太高,于是我把方向放在了多点找色上面
于是我打开了了autojs的文档,从里面找到了这样一个函数
1 | images.findMultiColors(img, firstColor, colors[, options]) |
参数 | 类型 | 描述 |
---|---|---|
img | {Image} | 要找色的图片 |
firstColor | {number 或 string} | 第一个点的颜色 |
colors | {Array} | 表示剩下的点相对于第一个点的位置和颜色的数组,数组的每个元素为[x, y, color] |
options | {Object} | 选项,包括:下面两个内容 |
region
{Array} 找色区域。是一个两个或四个元素的数组。(region[0], region[1])表示找色区域的左上角;region[2]*region[3]表示找色区域的宽高。如果只有region只有两个元素,则找色区域为(region[0], region[1])到屏幕右下角。如果不指定region选项,则找色区域为整张图片。threshold
{number} 找色时颜色相似度的临界值,范围为0 - 255(越小越相似,0为颜色相等,255为任何颜色都能匹配)。默认为4。threshold和浮点数相似度(0.0-1.0)的换算为 similarity = (255 - threshold) / 255.
函数aj给我们提供好了,剩下的就是开始写脚本了
2,编写过程
2.1 ,初期代码
找到了多点找色的函数,我第一个思路是在手机里截全屏,然后通过多点找色,找地鼠的特征点
然后我就开始截图,裁剪出地鼠的肚皮,然后找到了几个点,开始写代码
最初写出来的代码是这个样子的
1 | threads.start(function() { |
带上这串代码,我自信满满的前去挑战,没想到最后还不如我手动打出来的分数高,那我就不乐意了啊,于是开始琢磨怎么优化
2.2 初步优化代码
其实从第一段代码中就可以看到很多问题
- 找图直接找的全屏,浪费很多资源在没必要的地方
- 因为我是寻找地鼠的肚皮,所以相似度可以适当调整,加快速度
- 点击方法可以通过press函数进一步加快速度
找到一些问题那接下来就是开始优化代码
优化方向如下:
- 从全屏找图优化为区域找图(要做就做干脆点,直接找12个地洞的小区域)
- 提高相似度
- 使用press
后两点都很好解决,就是改个参数和函数的事情,所以这里着重讲第一点
通过单独一个红框的高和款我们可以得到两个参数 region: [x,y,宽,高 ]
而且这两个参数是固定的
接着开始计算12个红款左上角的x,y值
我们可以看出来每行所有x都是相同的,每列所有y都是相同的
因此,这里我建了两个数组,分别是
x=[x1,x2,x3,x4]
y=[y1,y2,y3]
通过两个数组,我们可以组合出所有区域的左上角坐标
分别是:
- 第一个区域(x1,y1)
- 第二个区域(x2,y1)
- 第三个区域(x3,y1)
- 第四个区域(x1,y2)
- …………………..
后面我就不一一列举了
然后我们就开始构建一个函数,直接把坐标传进去
1 | function findds(x,y) { |
把坐标传进函数里,然后就实现了区域内的多点找色
同时这里我把相似度直接改成了50
然后开始运行一下,果然,运行起来比刚才快了很多
2.3 寻找新道具代码
接下来就是找时钟道具了,我们如法炮制
直接区域多点找色
1 | function findtime(x,y) { |
可以看出和找地鼠差不多,
然后我们运行,但是会发现运行起来分数反而没有之前高了,其实我们很好判断,因为多了找色的步骤,所以变慢了
那么我们有没有优化的办法呢,这里我的思路是在找地鼠的函数里判断是否出现地鼠,,如果没有出现地鼠,在判断是否是时钟道具,
1 | function findds(x,y) { |
这里就把两个函数组合起来了,同时减少了一次截图的步骤更加缩短反应时间
最后在加个循环直接调用函数就可以运行了
2.4 后续优化
至此这个小脚本已经写得差不多了,后续就是一些小优化,比如减少反应时间,优化截图的调用之类的,这些就不在这里说了,毕竟大体框架已经搞定,后续添加以及优化并不难
这里我直接写了个ui界面
点击开始运行之后将会在左上角弹出悬浮窗
之后就可以运行了
3,总结
这个脚本其实并不复杂,主要是多点找色函数的使用,通过这次脚本编写,让自己学习到了多点找色的使用方法,以及编写过程是自己对多点找色脚本的优化有了一些理解
4,后续
尝试了一下自己的这个脚本
其实还有能优化的地方,但是目前对我来说已经够用了,就这样吧