[手机按键备忘]关于找动态图的常见处理手段和特殊应对

常见的动态图情况

1.我们要找的它可能在一定范围内移动

2.还可能周围有一定的色彩变化和其他颜色或者形态变化干扰

3 有的虽然肉眼看不出变化 但是移动了一定距离  原来的找图就无法再找到了。随着上下或者左右位置变化产生了一些渐变 但是肉眼难以发觉

常见应对

1.应对原理:移动变化 闪光和其他干扰 导致图片发生了各种变化 但是总有不会变化固定的地方 我们可以以这部分不变动的区域为基础做图色来进行找图

2.常见的处理手段 一个是做透明图,我们可以把变动的区域当作背景给处理  不动的区域为图片区域

3.另外一个是 多点找色,我们取点只需要取那些固定不变的区域的点即可 变化的都不取点,如果找的图位置固定 甚至可以考虑多点比色 取点和多点找色规则一样


特殊应对

有的时候需要找图可能不断的移动而且自身颜色形态不断变动没有多少不变的区域 要稳定的识别找到该图 只能用最粗暴的办法来实现

0.随便拿个gif图做例子 这个图基本上找不到一个可以固定不变的区域 同时还闪瞎狗眼

timgQ4Y57IG3

1.原理

无论怎么变化的图 他总归有一定的变化上限 不太可能出现一个按钮有上千种变化  游戏开发者不会把资源浪费到这种琐事上,我们把上面的gif图分解来看结果如下


闪瞎狗眼分解动作

可以看出整个动态图是由10个静态图构成的 ,就是说 我们如果能找到这10张静态图中的一张 那么我们就可以找到这个动态图

2 做法

按键抓抓来抓取动态图对应的静态图

image

截图结果:(这些截图有点粗 正常应该考虑四个角落透明图的情况)

image

配合手机按键找图函数一次可以找多个图片的特点

Dim intX,intY
//完整的找闪瞎狗眼图的找图函数
FindPic 4,522,532,953,"Attachment:timgQ4Y57IG3_1.png|Attachment:timgQ4Y57IG3_2.png|Attachment:timgQ4Y57IG3_3.png|Attachment:timgQ4Y57IG3_4.png|Attachment:timgQ4Y57IG3_5.png|Attachment:timgQ4Y57IG3_6.png|Attachment:timgQ4Y57IG3_7.png|Attachment:timgQ4Y57IG3_8.png|Attachment:timgQ4Y57IG3_9.png|Attachment:timgQ4Y57IG3_10.png","000000",0,0.8,intX,intY
If intX > -1 And intY > -1 Then
    TracePrint intX
    TracePrint intY
End If


注意:findpic函数一次能容纳的图片数量是有上限的 如果超出上限个 好像就会莫名其妙报错

一般性的找图要求 上面的这些做法基本上可以保证找到的准确度 ,但是如果要保证100%的识别 还是有一定的误差的 因为我们用按键抓抓点击一次瞬间抓10个图 也未必能保证把目标图的所有变化都抓尽如果能保证目标图可以稳定的存在一定的时间  那么我们用循环找图的的方式来查找那些我们当前找图错过的图片变化

Randomize
Dim intX,intY,当前随机数
//下面左右是找到目标图就输出找到的坐标 找不到就把当前界面截图存储下来 注意循环间隔时间不能太短 容易造成短时间内找不到图后频繁截图导致的系统资源不足
Do
    当前随机数=Int(((500-300+1) * Rnd()) + 1)
    FindPic 4,522,532,953,"Attachment:timgQ4Y57IG3_1.png|Attachment:timgQ4Y57IG3_2.png|Attachment:timgQ4Y57IG3_3.png|Attachment:timgQ4Y57IG3_4.png|Attachment:timgQ4Y57IG3_5.png|Attachment:timgQ4Y57IG3_6.png|Attachment:timgQ4Y57IG3_7.png|Attachment:timgQ4Y57IG3_8.png|Attachment:timgQ4Y57IG3_9.png|Attachment:timgQ4Y57IG3_10.png|Attachment:timgQ4Y57IG3_11.png|Attachment:timgQ4Y57IG3_12.png|Attachment:timgQ4Y57IG3_13.png|Attachment:timgQ4Y57IG3_14.png|Attachment:timgQ4Y57IG3_15.png|Attachment:timgQ4Y57IG3_16.png|Attachment:timgQ4Y57IG3_17.png|Attachment:timgQ4Y57IG3_18.png|Attachment:timgQ4Y57IG3_19.png|Attachment:timgQ4Y57IG3_20.png|Attachment:timgQ4Y57IG3_21.png|Attachment:timgQ4Y57IG3_22.png|Attachment:timgQ4Y57IG3_23.png|Attachment:timgQ4Y57IG3_24.png","000000",0,0.8,intX,intY
    If intX > -1 And intY > -1 Then 
        //找到了图就输出下坐标
        TracePrint intX
        TracePrint intY
    Else 
        //找不到目标图就把当前界面截图下来存储 等待脚本结束后做新的截图
        SnapShot GetSdcardDir()&"/"&cstr(time())&"_"&cstr(当前随机数)&".png"//把截图存放到sdcard目录下 起名为当前时间戳加上300-500的随机数命名图片
        
    End If
    
    Delay 当前随机数  //产生300-500的随机数 间隔时间随机 随机范围是300毫秒-500毫秒
Loop


123

posted @ 2019-05-21 15:43  点-滴  阅读(834)  评论(0编辑  收藏  举报