作为按键精灵安卓版最核心的内容(至少我这么觉得),图色操作是必备的,可能有童鞋仅用点击和延时来做脚本也能达到效果,但是这样的脚本不具备良好的抗压能力,可能手机卡顿一下,可能网络卡顿一下,就全乱套了。而使用图色脚本,可以根据界面的特征来识别出当前游戏或者应用的状态,做出相应操作,稳定性大大增强。要做出出色的脚本,以下几个图色命令必须掌握:
1. GetPixelColor()
功能为获取屏幕上某个坐标点的颜色,具体用法为:
- Dim rColor
- rColor = GetPixelColor(300, 300) //获取坐标300,300的点的颜色
- TracePrint “这个点的颜色为:”&rColor
通常与判断语句一起使用:
- Dim rColor
- rColor = GetPixelColor(300, 300)
- If rColor = “FFFFFF” Then
- TracePrint “坐标(300,300)的像素点颜色是FFFFFF,说明当前处于XX界面下”
- Else
- TracePrint “坐标(300,300)的像素点颜色不是FFFFFF,说明还没到XX界面”
- End If
虽然很简单,并且我们直接用他的时候也不多,但是下面的几个图色操作都是基于这个命令进行的,因此相当重要,必须理解其意思,返回的值是一个十六进制的BGR值,我们来了解一下BGR值以方便更好的理解命令的意思,所有的颜色都可以由蓝绿红三个颜色组成,不同的混合比例形成不同的颜色,在计算机中,我们将这三个颜色分量都分成255个级别,0为颜色最淡,255为颜色最深,一个点(像素)就由三个255级别的分量组成。而0-255用十六进制表示即为00-FF(有兴趣的同学自己搜索一下十六进制),我们不需要去记颜色,知道意思即可。 给你们个图,自己体会下意思~
2. CmpColorEx(mul_color,sim)
多点比色,具体用法为:
- If CmpColorEx(“300|500|123456-102030,305|505|FFFFFF”,0.9) = 1 Then
- TracePrint “全部点颜色相等”
- Else
- TracePrint “有一个或多个颜色不符合”
- End If
由于单个点坐标的颜色比较来判定图形容易误判,我们来看看下面的两个图,两个图中,如果我们只获取一个点来判定,比如取第二行第二排,也就是(2,2)这个点来判定,我们会得到一样的结果,没有办法区分两个图,但是如果我们取两个点,分别是(2,2)和(4,3),我们就可以分辨出这两个图。取得点越多,正确识别率越高,但是相应的耗时也会增加,容易混淆的图建议取多个点比较,反之取3到4个点基本就够用了。
我们试着来写一下以上两个图如何识别:
- If CmpColorEx(“2|2|000000-202020,4|3|000000-202020”, 0.9) = 1 Then
- TracePrint “这是第二个图”
- Else
- TracePrint “这不是第二个图”
- End If
2|2|000000-202020分别为取的第一个点的X坐标、Y坐标、颜色、允许的偏色范围,4|3|000000-202020分别为取的第二个点的X坐标、Y坐标、颜色、允许的偏色范围,其中偏色范围的意思是指相应的坐标点的颜色不需要完全相同,允许有偏色,偏色的量由我们自己来定,分别为BGR三个颜色分量的偏色!00的偏色范围20,即前后各10的偏色范围,如果是30的偏色范围为20的话,就是20-40都可。这里,我推荐偏色都设置成101010。下图就是000000-202020允许的偏色范围:
怎么样,相当好理解吧!就这样吧。。。等等,为什么后面还有个0.9呢,这个值的意思其实是相似度,其实跟偏色有点像,不同的设备显示一样的图或多或少都有一点点不一样(参考iphone屏幕和山寨机屏幕的颜色你就明白了),那么我们需要一定的容错率,允许颜色偏差在一定范围内可以接受,这个相似度的值在0-1之间,一般设置为0.9。
虽然都明白了,但是写起来好麻烦啊。。。来来来,用抓抓自动帮你写命令,看图说话!
1. 找到想取的颜色的点,按Ctrl+数字键选取(数字键1就对应序号的1)。
2. 自定义偏色范围,在框内写上偏色值。
3. 将选取的点勾起来
4. 生成命令选择CmpColorEx
5. 点击复制完整命令
直接黏贴在脚本编辑区中吧!就这么快!
3. FindMultiColor
多点找色,具体用法是:
- Dim IntX,IntY
- FindMultiColor 0,0,0,0,”FFFFFF”,”4|1|2F9772-000000|123456-101010,3|7|378757″,0,0.9,intX,intY
- If intX > -1 Then
- TracePrint “找到啦,坐标在”&intX&”,”&intY
- Else
- TracePrint “没找到”
- End If
多点找色,也叫做区域多点找色,是用来寻找位置会发生变化,但是特征没变的图形的,一般用来代替区域找图用,效率更高。
多点找色的原理是利用寻找点的偏移位置的颜色来判定,以达到确定寻找点的位置,我们来看看下图,我们希望寻找到一个黑色的点,如果在整张图中寻找,我们会得到3个结果,这并不是我们想要的,于是我们需要知道其他的条件,现在,我还知道这个黑色的点的下面也有一个黑色的点,于是我们去将这三个黑点的下面一个点进行判定,得到了唯一的我们想要的点的坐标,愉快的进行操作吧!
我们继续来将上面的例子写出来:
- Dim IntX,IntY
- FindMultiColor 0,0,0,0,”000000″,”0|1|000000-202020″,0,0.9,intX,intY
- If intX > -1 Then
- TracePrint “找到啦,坐标在”&intX&”,”&intY
- Else
- TracePrint “没找到”
- End If
一开始,先定义一个坐标(intX和intY,可以随自己喜好命名),用来存放找到的位置的坐标。0,0,0,0的意思是搜索范围的起始坐标和结束坐标(四个0默认是全屏),搜索范围是一个正方形,起始坐标在左上角,结束坐标在右下角,比如:10,20,30,40就是坐标(10,20)和坐标(30,40)组成的矩形范围:
在这个范围外的区域不进行查找,设置区域一方面可以加快查找效率,一方面可以排除部分干扰,比如两个图特征相似,很难分辨,但是他们位置区别很明显,我们就可以限制查找范围来寻找。后面的“FFFFFF-202020”就是寻找的点的颜色(202020依旧是偏色,解释就在楼上~)。重点在更后面的那一行“0|1|FFFFFF-202020”中的”0|1”,毫无疑问这是一个坐标,但是他并不是在屏幕中的绝对坐标,而是相对于寻找到的那个点的坐标,也就是我们把寻找到的点当做坐标(0,0),因此这个(0,1)就是在寻找到的点往右偏移0个位置,往下偏移1个位置的点。至于后面的0和0.9,前者是搜索模式,就是扫描此区域采用的顺序,0.9为相似度,基本不需要改,采用默认设置即可。
工程量感觉比比色还要巨大啊,偏移位置要算死的节奏啊。。。好吧,还是抓抓工具,帮你几步完成,其他步骤均与CmpColorEx相似,可以自己写上一个寻找范围,并且生成命令选择FindMultiColor即可:
常用的图色操作就是2与3的两个命令(1是他们的基础~),请务必记下来用法与原理,他们貌似挺相似的,那么我们应该怎么选择呢?多点比色取的是固定点的坐标,也就是绝对值坐标,那么也就是我们寻找的特征不能移动,适合特征在固定位置的情况下,而多点找色使用的是相对比较,可以在一片区域内寻找特征,适合位置会移动的特征。当然还有其他一些区域找图的命令(命令大全里,下图,用法都类似),个人推荐在十分无奈的情况下才用(屏幕上要寻找的图有许多其他很相似的图,多点找色难以寻找到)。
本站所有文章,如无特殊说明或标注,均为本站原创发布。
任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)