简洁的参数与灵活的返回值
可能新手刚看到超级图色命令的时候,会觉得好多的参数,好复杂的样子。
其实非常非常简单,因为它所有参数都是可选,并且绝大多数可以打乱顺序随意填写的,下面举几个简单常用的例子。
不要被注释和输出吓到,去掉注释和输出,就那么两三行代码。
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
//================例子1================//
'查找两张图片, 分别是图片1.png和图片2.png
'查找范围默认全屏
'相似度默认0.8
'方向默认从左到右,从上到下
'图片所在路径默认为附件
Dim ret '定义找图返回值
ret = zm.FindPic("图片1.png|图片2.png")
'找到图片返回table, 没有找到返回null, 所以直接判断变量名
If ret Then
TracePrint "找到图片了, 返回值有以下3种使用方法, 任选一种使用"
TracePrint "数组方式: 序号=" & ret(0), ", 坐标x=" & ret(1), ", 坐标y=" & ret(2), ", 图片名=" & ret(3)
TracePrint "表下标方式: 序号=" & ret[1], ", 坐标x=" & ret[2], ", 坐标y=" & ret[3], ", 图片名=" & ret[4]
TracePrint "表键名方式: 序号=" & ret["id"], ", 坐标x=" & ret["x"], ", 坐标y=" & ret["y"], ", 图片名=" & ret["name"]
Else
TracePrint "没有找到图片"
End If
//================例子2================//
'把返回值保存在数组参数中, 称为返回参数
'这种写法可以少写一行赋值代码, 美化脚本结构
'与例子1相似, 区别在于返回结果保存在了数组t中
'可以直接判断命令返回值, 也可以单独调用后判断返回数组t
Dim t() '定义返回参数数组, 必须是数组
If zm.FindPic("图片1.png|图片2.png", t) Then
TracePrint "找到图片了, 同样有以下3种使用方法, 任选一种使用"
TracePrint "数组方式: 序号=" & t(0), ", 坐标x=" & t(1), ", 坐标y=" & t(2), ", 图片名=" & t(3)
TracePrint "表下标方式: 序号=" & t[1], ", 坐标x=" & t[2], ", 坐标y=" & t[3], ", 图片名=" & t[4]
TracePrint "表键名方式: 序号=" & t["id"], ", 坐标x=" & t["x"], ", 坐标y=" & t["y"], ", 图片名=" & t["name"]
Else
TracePrint "没有找到图片"
End If
//================例子3================//
'由于大部分找图返回结果只使用一次后, 就不会再使用了
'所以我们可以设置统一默认返回值, 让它保存最近一次找图结果
'通过使用zm.SetFindPic()设置默认返回参数数组tPic
'如果zm.FindPic()命令没有指定返回参数数组, 则默认保存在tPic中
'与例子2相似, 由于没有指定返回参数数组, 所以默认保存在tPic中
Dim tPic() '定义默认返回数组
zm.SetFindPic {"ret":tPic}
If zm.FindPic("图片1.png|图片2.png") Then
TracePrint "找到图片了, 同样有以下3种使用方法, 任选一种使用"
TracePrint "数组方式: 序号=" & tPic(0), ", 坐标x=" & tPic(1), ", 坐标y=" & tPic(2), ", 图片名=" & tPic(3)
TracePrint "表下标方式: 序号=" & tPic[1], ", 坐标x=" & tPic[2], ", 坐标y=" & tPic[3], ", 图片名=" & tPic[4]
TracePrint "表键名方式: 序号=" & tPic["id"], ", 坐标x=" & tPic["x"], ", 坐标y=" & tPic["y"], ", 图片名=" & tPic["name"]
Else
TracePrint "没有找到图片"
End If
'由于前面设置过默认返回值, 所以后面所有zm.FindPic()命令在不写返回参数数组的情况下, 都会保存结果到tPic数组中
If zm.FindPic("图片3.png") Then
TracePrint "图片结果保存在tPic中", tPic(0), tPic(1), tPic(2), tPic(3)
End If
'指定返回参数数组tt后, 本次查找结果保存在数组tt中, 对默认返回数组tPic没有影响
Dim tt()
If zm.FindPic("图片4.png", tt) Then
TracePrint "本次结果tt:", tt[1], tt[2], tt[3], tt[4]
TracePrint "默认数组tPic:", tPic[1], tPic[2], tPic[3], tPic[4]
End If
限时循环找图,解决找不到图的问题
脚本中找图的时机很重要,有时候屏幕上还没出现这图,你就开始找图的话,肯定找不到。
但是如果加延时后再找图的话,延时时间不好确定,过高就效率就太慢,过低就找不到图。
这时候就需要限时循环找图登场了,他可以在指定时间内不断的查找图片,如果找到就立即停止找图,否则等超时后自动停止并返回没有找到
另外,当你想找一些动态变化的图片时,也可以使用本功能,截图多张不同样子的图片,再限时循环找图,找到任何一张都表示找到动态图了。
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
Dim tPic() '定义默认返回数组
zm.SetFindPic {"ret":tPic, "showlog":"显示"} '设置默认返回值与显示日志
//================例子4================//
'在5000毫秒内不断查找图片1.png和图片2.png
'找到任何一张都立即停止查找并保存结果
If zm.FindPic("图片1.png|图片2.png", 5000) Then
TracePrint "找到图片了, 序号=" & tPic(0), "x=" & tPic(1), "y=" & tPic(2), "图片名=" & tPic(3)
Else
TracePrint "没有找到图片"
End If
找到图后自动点击与延时
一般我们找到图片后常见的操作都是点击,所以本插件集成了自动点击功能。
更加强大的地方是,除了可以点击找到的坐标外,还可以点击偏移坐标、固定坐标、混合坐标、防检测随机坐标。
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
Dim tPic() '定义默认返回数组
zm.SetFindPic {"ret":tPic, "showlog":"显示"} '设置默认返回值与显示日志
//================例子5================//
'参数True表示开启点击找到坐标的功能, 默认为直接点击找到的坐标
If zm.FindPic("图片1.png|图片2.png", True) Then
TracePrint "找到图片并自动点击"
Else
TracePrint "没有找到图片, 不执行点击"
End If
//================例子6================//
'参数"+10,-20"表示找到图后, 点击找到坐标x+10,找到坐标y-20的位置, 也就是偏移点击
If zm.FindPic("图片1.png|图片2.png", True, "+10,-20") Then
TracePrint "找到图片并自动点击"
Else
TracePrint "没有找到图片, 不执行点击"
End If
//================例子7================//
'参数"100,200"表示找到图后, 点击固定坐标100,200的位置
If zm.FindPic("图片1.png|图片2.png", True, "100,200") Then
TracePrint "找到图片并自动点击"
Else
TracePrint "没有找到图片, 不执行点击"
End If
//================例子8================//
'参数"+0,-20,3000"表示找到图后, 点击找到坐标x+0,找到坐标y-20的位置(也就是x不变, y移动-20)
'点击后再延时3000毫秒
If zm.FindPic("图片1.png|图片2.png", True, "+0,-20,3000") Then
TracePrint "找到图片并自动点击"
Else
TracePrint "没有找到图片, 不执行点击"
End If
//================例子9================//
'参数"100,+200,1500"表示找到图后, 点击100,找到坐标y+200的位置(也就是x固定100,y移动200)
'点击后再延时1500毫秒
If zm.FindPic("图片1.png|图片2.png", True, "100,+200,1500") Then
TracePrint "找到图片并自动点击"
Else
TracePrint "没有找到图片, 不执行点击"
End If
//================例子10================//
'设置点击坐标的随机浮动值, x浮动在[-10,15], y浮动在[5,20]
'举个例子, 点击坐标100,200时, x随机范围是[100-10, 100+15], y随机范围是[200+5, 200+20]
'该浮动设置对所有超级图色命令有效, 对点击参数True和点击坐标参数也都有效
zm.SetTap {"minx":-10, "maxx":15, "miny":5, "maxy":20}
If zm.FindPic("图片1.png|图片2.png", True) Then
TracePrint "找到图片并随机点击[x-10,x+15],[y+5,y+20]"
Else
TracePrint "没有找到图片, 不执行点击"
End If
智能相似度,解决相似度不准确问题
超级找图的相似度默认值是0.8,可以兼容绝大多数的找图需求。
但是一些特殊情况下,我们需要修改相似度,那么我们只需要在代码里加入相似度参数即可。
另外,当我们对相似度要求非常高,但是又不确定设置多少相似度合适时,可以使用智能相似度参数。
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
Dim tPic() '定义默认返回数组
zm.SetFindPic {"ret":tPic, "showlog":"显示"} '设置默认返回值与显示日志
//================例子11================//
'默认相似度为0.8, 参数取值范围[0, 1]
'下面是以0.9的相似度进行查找图片
If zm.FindPic("图片1.png", 0.9) Then
TracePrint "找到图片了, 序号=" & tPic(0), "x=" & tPic(1), "y=" & tPic(2), "图片名=" & tPic(3)
Else
TracePrint "没有找到图片"
End If
//================例子12================//
'当我们对相似度要求很高, 但是又不知道最佳相似度时, 可以使用智能相似度
'参数格式要求是"最小相似度-最大相似度-步长", 步长是可选的, 默认每次降低0.05
'一般智能相似度与限时循环参数搭配使用, 当然也可以独立使用
'启用智能相似度后, 固定相似度参数失效
'下面是以最低相似度0.8, 最高相似度0.9, 默认步长0.05的智能相似度方式找图
If zm.FindPic("图片1.png", "0.8-0.9") Then
TracePrint "找到图片了, 序号=" & tPic(0), "x=" & tPic(1), "y=" & tPic(2), "图片名=" & tPic(3)
Else
TracePrint "没有找到图片"
End If
'下面是以最低相似度0.9, 最高相似度1.0, 步长0.01, 限时查找5000毫秒的方式找图
If zm.FindPic("图片1.png", "0.9-1.0-0.01", 5000) Then
TracePrint "找到图片了, 序号=" & tPic(0), "x=" & tPic(1), "y=" & tPic(2), "图片名=" & tPic(3)
Else
TracePrint "没有找到图片"
End If
轻松实现缩放找图功能
按键精灵的缩放命令SetScreenScale()对FindPic无效,所以需要截取图片按照指定格式文件名保存,比如“横向分辨率x纵向分辨率xDPI-图片名.png”这种类型,然后每次找图代码都要处理图片名,非常麻烦。
这里我们可以通过设置图片默认前缀来实现自动使用对应分辨率图片功能。
当然,你需要提前把各个分辨率的图片截取保存下来,按照上面说的文件名格式放入附件中。
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
Dim tPic() '定义默认返回数组
zm.SetFindPic {"ret":tPic, "showlog":"显示"} '设置默认返回值与显示日志
//================例子13================//
zm.SetScreenScale 720, 1280 '设置屏幕缩放
'附件中存放各个分辨率的图片, 图片文件名格式为: 横向分辨率x纵向分辨率xDPI数值-图片名.png
Dim 图片前缀 = "Attachment:" & GetScreenX() & "x" & GetScreenY() & "x" & Device.GetDPI() & "-"
TracePrint "本设备的图片默认前缀为:", 图片前缀
zm.SetFindPic {"pic":图片前缀} '设置找图的图片前缀
If zm.FindPic("图片1.png|图片2.png") Then
'如果只写图片名的话, 插件就会自动帮你把图片前缀加上去
TracePrint "找到图片了, 序号=" & tPic(0), ", x=" & tPic(1), ", y=" & tPic(2), ", 图片名=" & tPic(3)
Else
TracePrint "没找到图片"
End If
//================例子14================//
'如果写了完整图片路径参数的话, 插件不会加入前缀
If zm.FindPic("Attachment:图片1.png|/sdcard/图片2.png|图片3.png") Then
'可以通过内置日志输出功能看到, 图片1和图片2是原来的路径, 图片3加入了前缀路径
TracePrint "找到图片了, 序号=" & tPic(0), ", x=" & tPic(1), ", y=" & tPic(2), ", 图片名=" & tPic(3)
Else
TracePrint "没找到图片"
End If
自定义查找范围与方向
有时候屏幕上有多张相同图片,我们需要指定范围查找,或者修改查找方向获取不同结果。
这时候就需要范围参数与方向了。
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
Dim tPic() '定义默认返回数组
zm.SetFindPic {"ret":tPic, "showlog":"显示"} '设置默认返回值与显示日志
//================例子19================//
'默认是全屏查找图片, 但有时候需要指定范围查找, 可以通过范围参数实现
'也可以用zm.SetFindPic()修改默认范围
'注意, 范围顺序是左上角xy坐标和右下角xy坐标, 必须写完整, 不可打乱顺序
If zm.FindPic(100, 200, 500, 600, "图片1.png|图片2.png") Then
TracePrint "找到图片了, 序号=" & tPic(0), ", x=" & tPic(1), ", y=" & tPic(2), ", 图片名=" & tPic(3)
Else
TracePrint "没找到图片"
End If
'如果你还要加入相似度与超时时间的话, 请把范围参数放在最前面, 以免识别参数出错
'下面代码中, 相似度0.9和超时5000可以自由更换位置, 但是必须位于范围参数后面
zm.FindPic "图片.png", 10, 20, 50, 60, 0.9, 5000
//================例子20================//
'查找方向参数是字符串, 分别是["左上","中心","右上","左下","右下","上左","上右","下左","下右"]这几个值
'中文与数字比较起来, 中文更加便于理解, 比如左上就是从左到右从上到下的顺序
zm.FindPic "图片.png", "中心"

3万+

被折叠的 条评论
为什么被折叠?



