• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.05
软件大小:21.6M
更新时间:07-04

按键精灵安卓版
立即下载

软件版本:3.3.0
软件大小:62.5M
更新时间:5-24

按键精灵iOS版
立即下载

软件版本:1.3.3
软件大小:29.2M
更新时间:06-14

按键精灵Mac版
立即下载

软件版本:1.1.0
软件大小:12.3M
更新时间:12-29

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
发新话题 回复该主题

[按键精灵手机版2.5基础教程] 4.图色操作 [复制链接]

1#

按键精灵手机版2.5基础教程

4.图色操作


作为按键精灵安卓版最核心的内容(至少我这么觉得),图色操作是必备的,可能有童鞋仅用点击和延时来做脚本也能达到效果,但是这样的脚本不具备良好的抗压能力,可能手机卡顿一下,可能网络卡顿一下,就全乱套了。而使用图色脚本,可以根据界面的特征来识别出当前游戏或者应用的状态,做出相应操作,稳定性大大增强。要做出出色的脚本,以下几个图色命令必须掌握:


1. GetPixelColor()

功能为获取屏幕上某个坐标点的颜色,具体用法为:

  1. Dim rColor
  2. rColor = GetPixelColor(300, 300) //获取坐标300,300的点的颜色
  3. TracePrint “这个点的颜色为:”&rColor
复制代码

通常与判断语句一起使用:

  1. Dim rColor
  2. rColor = GetPixelColor(300, 300)
  3. If rColor = "FFFFFF" Then
  4. TracePrint "坐标(300,300)的像素点颜色是FFFFFF,说明当前处于XX界面下"
  5. Else
  6. TracePrint "坐标(300,300)的像素点颜色不是FFFFFF,说明还没到XX界面"
  7. End If
复制代码
虽然很简单,并且我们直接用他的时候也不多,但是下面的几个图色操作都是基于这个命令进行的,因此相当重要,必须理解其意思,返回的值是一个十六进制的BGR值,我们来了解一下BGR值以方便更好的理解命令的意思,所有的颜色都可以由蓝绿红三个颜色组成,不同的混合比例形成不同的颜色,在计算机中,我们将这三个颜色分量都分成255个级别,0为颜色最淡,255为颜色最深,一个点(像素)就由三个255级别的分量组成。而0-255用十六进制表示即为00-FF(有兴趣的同学自己搜索一下十六进制),我们不需要去记颜色,知道意思即可。 给你们个图,自己体会下意思~




2. CmpColorEx(mul_color,sim)
多点比色,具体用法为:
  1. If CmpColorEx("300|500|123456-102030,305|505|FFFFFF",0.9) = 1 Then
  2. TracePrint "全部点颜色相等"
  3. Else
  4. TracePrint "有一个或多个颜色不符合"
  5. End If
复制代码
由于单个点坐标的颜色比较来判定图形容易误判,我们来看看下面的两个图,两个图中,如果我们只获取一个点来判定,比如取第二行第二排,也就是(2,2)这个点来判定,我们会得到一样的结果,没有办法区分两个图,但是如果我们取两个点,分别是(2,2)和(4,3),我们就可以分辨出这两个图。取得点越多,正确识别率越高,但是相应的耗时也会增加,容易混淆的图建议取多个点比较,反之取3到4个点基本就够用了。



我们试着来写一下以上两个图如何识别:
  1. If CmpColorEx("2|2|000000-202020,4|3|000000-202020", 0.9) = 1 Then
  2. TracePrint "这是第二个图"
  3. Else
  4. TracePrint "这不是第二个图"
  5. 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

多点找色,具体用法是:

  1. Dim IntX,IntY
  2. FindMultiColor 0,0,0,0,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY
  3. If intX > -1 Then
  4. TracePrint "找到啦,坐标在"&intX&","&intY
  5. Else
  6. TracePrint "没找到"
  7. End If
复制代码

多点找色,也叫做区域多点找色,是用来寻找位置会发生变化,但是特征没变的图形的,一般用来代替区域找图用,效率更高。

多点找色的原理是利用寻找点的偏移位置的颜色来判定,以达到确定寻找点的位置,我们来看看下图,我们希望寻找到一个黑色的点,如果在整张图中寻找,我们会得到3个结果,这并不是我们想要的,于是我们需要知道其他的条件,现在,我还知道这个黑色的点的下面也有一个黑色的点,于是我们去将这三个黑点的下面一个点进行判定,得到了唯一的我们想要的点的坐标,愉快的进行操作吧!




我们继续来将上面的例子写出来:
  1. Dim IntX,IntY
  2. FindMultiColor 0,0,0,0,"000000","0|1|000000-202020",0,0.9,intX,intY
  3. If intX > -1 Then
  4. TracePrint "找到啦,坐标在"&intX&","&intY
  5. Else
  6. TracePrint "没找到"
  7. 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是他们的基础~),请务必记下来用法与原理,他们貌似挺相似的,那么我们应该怎么选择呢?多点比色取的是固定点的坐标,也就是绝对值坐标,那么也就是我们寻找的特征不能移动,适合特征在固定位置的情况下,而多点找色使用的是相对比较,可以在一片区域内寻找特征,适合位置会移动的特征。当然还有其他一些区域找图的命令(命令大全里,下图,用法都类似),个人推荐在十分无奈的情况下才用(屏幕上要寻找的图有许多其他很相似的图,多点找色难以寻找到)。



点评

hungchih919  讚唷! 學習中~  发表于 2017/4/19 11:33:18
dpkj2008  牛B的不要不要的  发表于 2016/9/25 2:57:35
aj15090653145  赞、正在吸收、希望再出些教程!  发表于 2016/5/10 15:04:21

最后编辑兄弟工程师13 最后编辑于 2016-01-22 14:25:16
本主题由 按键工程师 兄弟工程师13 于 2015/9/29 14:12:59 执行 移动主题 操作
2#

ios版找图路径放哪里

3#

必须赞~~~~~~

4#

继续学习

5#

不错,做了下第3关感觉枪速有点不好控制

6#

好东西,谢谢楼主

7#

大神,请问哈抓抓模拟器上后台截图显示空白无法操作获取数据。

8#

谢谢分享,感觉很大帮助熟悉

9#

希望多出点教程

10#

每天学习点

11#

6666,学习了。赞一个。但是我想问一个问题。两段找色的命令可不可以加ELSE来合并成这个样子
Dim intX,intY
Do
FindMultiColor 476,526,3,426, "46B61D-101010","1|42|45A8EE-101010,-1|67|3A8D1C-101010", 0, 0.9, intX, intY
If intX > -1 And intY > -1 Then
Tap 350, 658

ELSE

FindMultiColor 476,526,3,423, "033BE8-101010","1|32|0235DD-101010,6|67|0423C4-101010", 0, 0.9, intX, intY
If intX > -1 And intY > -1 Then
Tap 119,660
End If

LOOP

(代码借用楼上的兄弟,我的意思是这个循环可以加上ELSE合并么)

12#

消化吸收之

能想到,但不一定能做到。
动动手,更容易发现问题。
13#

很透彻,感谢!

14#

很详细的教程,忍不住动手了一番

能想到,但不一定能做到。
动动手,更容易发现问题。
15#

开始有点迷糊了哈哈

16#

好东西!讲的好详细,辛苦了

时间总是不够用...
17#

虽然写了很长,但是只是解释了2个功能,其他的没说明,命令大全那边没这里解释清楚,还是靠自己摸索吧。。

18#

大神大神

19#

很不错,学习一下

20#

學習了! 謝謝

发新话题 回复该主题