跳到主要内容

zm.CmpColorEx 超级多点比色

🎯功能

CmpColorEx 对比多个点颜色 更加强大的命令, 具体特色如下

  • 支持多组多点比色数据, 并且返回找到的序号, 详见示例
  • 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
  • 参数太多, 顺序记不住? 除了对象参数只能填写第一个外, 其他参数大部分可以打乱顺序随便写
  • 省略参数的默认值不理想? 可使用 zm.SetCmpColorEx 设置CmpColorEx默认参数 来自定义修改
  • 担心一次对比不到颜色? 自由设置限时循环对比时间, 提高成功率
  • 画面变化太大, 颜色相似度不好设置? 智能颜色相似度帮你全自动查找
  • 对比点存在误差, 需要忽略一定数量的点? 数量相似度解决此问题
  • 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
  • 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
  • 支持命令返回值与参数返回值, 你想怎么写, 就怎么写, 返回值中有序号, 坐标, 颜色
  • 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
  • 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
  • 需要防检测点击功能? 推荐使用zm.CmpColorExTap 超级多点比色点击
  • 需要遍历多个对象数组? 推荐使用zm.CmpColorExTable 超级多点比色遍历

📜语法

结果 = zm.CmpColorEx([对象][颜色组, ...][, 颜色相似度[, 智能颜色相似度[, 颜色相似度步长]]][, 数量相似度][, 对比超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])

📥参数

参数数据类型解释
对象可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色组字符串可选, 需要对比的点xy坐标和16进制颜色, 支持填写多组不同的颜色组, 格式与CmpColorEx 对比多个点颜色参数相同, 都是(X坐标|Y坐标|16进制颜色), 多个颜色用“|”号分隔, 需要偏色用“-”号分隔, 多个点信息用“,”号分隔, 比如"100|200|FFFFFF|123456-000000,300|500|FFFFFF"
颜色相似度数值型可选, 对比查找的颜色相似度小数, 省略默认为0.9, 取值范围[0, 1.0], 越高越相似
智能颜色相似度数值型可选, 与颜色相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与颜色相似度相同, 取值范围[0, 1.0], 越高越相似
颜色相似度步长数值型可选, 智能颜色相似度调节变化间隔, 必须写在颜色相似度智能颜色相似度后面, 省略默认为0.05, 取值范围[0, 1.0]
数量相似度字符串可选, 一组颜色组中符合条件的颜色数量比值, 注意是字符串数据类型, 省略默认为"1.0", 取值范围["0", "1.0"], 越高越相似
对比超时数值型可选, 限时对比时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为1
是否点击布尔型可选, 是否需要对比成功后自动点击该组的第一个点坐标, 支持[true, false]这两个值, 省略默认为false
点击坐标字符串可选, 点击修改后的坐标, 格式"±x,±y,t", 省略为对比成功组的第一点坐标, t是可选的, 表示点击后延时毫秒, 例如"100,100"表示固定点击坐标100,100, "+10,-10"表示偏移点击对比成功组的第一点坐标的x+10,y-10位置, "10,10,2000"表示点击10,10坐标后延时2000毫秒, 该参数会受zm.SetTap 设置超级点击影响
显示日志字符串可选, 输出调试日志信息, 省略默认为"隐藏", 支持 ["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"] 这几个值
输出行号字符串可选, 格式为"_"开头后跟行号, 比如"_10"表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注字符串可选, 格式为"@"开头后跟内容, 在调试日志信息中加入该内容, 比如"@拾取屠龙刀", 若连续两个"@@"则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失数值型可选, 填写-1禁用或-2启用, -2表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为-1, 启用后返回值将有miss键名, 值为true时表示成功消失, 值为false表示未消失
消失超时数值型可选, 填写负数, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1-2, 省略默认为-2000
参数返回值可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同

📤返回

table , 返回符合要求的第一个点坐标并保存到表中, 格式为{id, x, y, name, "id":id, "x":x, "y":y, "name":name, "miss":miss}, 对比失败或出错返回null

💡示例

Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次

Dim ret
//--------------------例子1--------------------//
//表示对比两组多点比色数据, 分别是"205|177|0CBB00,228|169|FFFFFF"和"61|340|3DC3EE"
//支持无限添加多点比色数据, 按顺序比较, 只要有一组对比成功, 就返回结果
//不填写相似度情况下, 省略默认相似度为0.9
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE")
If ret Then
TracePrint "对比颜色成功"
Else
TracePrint "对比颜色失败"
End If

//--------------------例子2--------------------//
//如何对比动态变化的画面?
//原理:用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
// 说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
// 那么对每一次截图采集一些多点比色数据, 然后让脚本循环多次比较这些数据
// 只要任何一组数据对比成功, 都可以认为是找到这个动态图了
// 所以可以使用本命令的无限添加多点比色数据与设置超时时间来实现
// 想提高查找速度的话, 建议提高相似度, 增加多点比色数据
//下面代码实现在5000毫秒内不断循环比较两组多点比色数据, 任何一组对比成功了, 就立即返回该组数据的第一个坐标
//超过5000毫秒没对比成功, 就返回null
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 5000)
If ret Then
TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
TracePrint "对比颜色失败"
End If

//--------------------例子3--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//除对象参数外, 大部分参数都可以打乱顺序填写, 只要数据类型与格式正确即可
//下面代码实现以(0.8)的颜色相似度比较两组多点比色数据, 并把返回结果保存在数组变量(返回数组)中
If zm.CmpColorEx(0.8, "205|177|0CBB00,228|169|FFFFFF", 返回数组, "61|340|3DC3EE") Then
TracePrint "对比颜色成功, 序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "name=" & 返回数组["name"]
Else
TracePrint "对比颜色失败"
End If

//--------------------例子4--------------------//
//有时候颜色的相似度不好取值, 那么可以借助智能相似度实现判断
//下面这段代码中就表示从高相似度1.0到低相似度0.7, 以每次减少0.1的值进行循环对比
//只要对比成功了, 就立即返回结果, 需注意, 相似度步长必须写在两个颜色相似度后面
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.7, 1.0, 0.1)
If ret Then
TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
TracePrint "对比颜色失败"
End If

//--------------------例子5--------------------//
//请注意这个例子中的参数("0.7"), 这是指数量相似度, 必须是字符串数据类型
//数量相似度是指多点比色数据中符合条件点的比例, "0.7"即70%以上个点符合条件
//例如下面这组多点比色数据一共有4个点, 那么对比时, 只要有4*0.7=2.8个点以上符合条件, 就可以返回对比成功
ret = zm.CmpColorEx("5|7|0CBB00,2|1|FFFFFF,4|3|3DC3EE,1|3|354311", "0.7")
If ret Then
TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
TracePrint "对比颜色失败"
End If

//--------------------例子6--------------------//
//写代码过程中的调试输出信息是非常重要的, 但是每次都要专门写一次TracePrint也挺麻烦
//所以可以直接把输出信息写在参数里, 让它自动输出详细内容
//加入参数("显示")或("show")就表示要输出结果, 没有这个参数就不会输出内容
//加入参数("@内容")就表示输出的备注信息, 因为这个输出是不带行号的, 所以备注信息很有必要输出显示
//加入参数("_行数")表示在带上输出行号, 不过代码改动, 行号变化后, 这里也要重新修改, 比较麻烦, 不如备注来的方便
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", "显示", "@怪物", "_72")
If ret Then
TracePrint "对比颜色成功"
Else
TracePrint "对比颜色失败"
End If

//--------------------例子7--------------------//
//对比成功后可能会需要点击操作, 那么加入参数(true)就可以实现点击返回的坐标
//但是由于对比和点击是由两个动作组成, 所以更加推荐使用zm.CmpColorExTap()命令来实现这个功能
//省略点击坐标参数情况下, 默认点击的坐标是对比成功的颜色组第一个点
//比如第一组颜色对比成功, 那么点击就是(205,177), 如果是第二组, 那么就是点击(61,340)
//如果加入点击坐标参数("100,-20,3000"), 那么点击坐标将发生改变, 以返回坐标(205,177)为例
//实际点击坐标是(100,177-20=157), 并且点击后延时3000毫秒
//更多关于点击坐标参数格式请查看参数信息里的内容
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", True, "100,-20,3000")
If ret Then
TracePrint "对比颜色成功"
Else
TracePrint "对比颜色失败"
End If


//--------------------例子8--------------------//
//有时候需要判断对比成功后, 过一段时间画面消失, 也就是对比失败这个过程
//那么可以通过等待消失和消失超时参数来实现
//下面代码中, 参数(-2)表示开启等待消失功能, 参数(-5000)表示在5000毫秒内不断判断对比是否失败
//如果对比失败, 就表示画面消失了, 立即返回结果
//其中返回的坐标依旧是对比成功点的坐标, 而是否消失的结果保存在键名("miss")中
//要注意的是只有先对比成功后, 才会进入等待消失, 如果一开始就对比失败, 那就不会去等待消失了
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", -2, -5000)
If ret Then
TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
TracePrint "画面是否消失 = ", ret["miss"]
Else
TracePrint "对比颜色失败"
End If

//--------------------例子9--------------------//
//可选参数都可以组合起来实现, 大部分参数可以乱序填写, 下面代码意思如下:
//以颜色相似度为(0.8), 数量相似度("0.7")的设置
//比较两组多点比色数据, 分别是"205|177|0CBB00,228|169|FFFFFF"和"61|340|3DC3EE"
//限时在2000毫秒内循环比较, 找到任何一个后退出循环查找
//并将对比成功颜色组的序号和第一个点坐标保存在数组变量(ret)与(返回数组)中
//比如"205|177|0CBB00,228|169|FFFFFF"对比成功则返回序号0, 坐标(205,177)
//而如果是"61|340|3DC3EE"对比成功, 则返回序号1, 坐标(61,340)
//同时开启日志的输出("显示")功能, 输出备注("@紫猫Boss"), 对比结果与其他参数信息
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.8, "0.7", 2000, "显示", "@紫猫Boss", 返回数组)
If ret Then
TracePrint "对比颜色成功"
Else
TracePrint "对比颜色失败"
End If

//--------------------例子10--------------------//
//脚本变量的管理是一个难题, 每组图色数据都是独立的, 为了方便代码结构的管理
//可以把所有参数放到一个表中, 表中的数据一样可以打乱顺序任意填写或省略
//这个表就是对象参数, 它必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_133"), 则表示重写对象里的("_36"), 使日志输出显示在46行
//注意, 多点比色数据不会被覆盖重写, 只会被追加, 相当于所有的多点比色数据都会被用来查找
//如果你有多组不同的对象参数需要遍历, 那么推荐使用zm.CmpColorExTable()
Dim 史莱姆 = {"205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.8, 2000, "显示", "@怪物1", 返回数组, "_39"}
zm.CmpColorEx 史莱姆, "_134", "11|140|1542EE"

//--------------------例子11--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有超级多点比色相关命令都默认输出调试信息
//更多修改默认设置详见 zm.SetCmpColorEx() 命令帮助
zm.SetCmpColorEx {"ret":IXYs, "showlog":"显示"}
If zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF") Then
TracePrint "可以用以下3种格式获取返回值"
TracePrint "对比颜色成功, 序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
TracePrint "对比颜色成功, 序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
TracePrint "对比颜色成功, 序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
Else
TracePrint "对比颜色失败"
End If

📘备注

  • 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
  • 多点比色颜色组数据请通过抓抓进行获取
  • 偏色是微调,指对RBG三色分别确定取色范围。颜色相似度是粗调,指对颜色整体做百分比判断。
  • 数量相似度是指颜色组对比成功点的比例, 例如 "1|1|3DC3EE,2|2|346AFF,3|3|1592FF,4|4|1592FF,5|5|231209,6|6|241306,7|7|201004,8|8|241306,9|9|241306" 这组多点比色数据有9个点, 如果数量相似度填写"0.8"就意味着对比成功条件是0.8*9=7.2个点以上符合要求, 而点的个数肯定是整数, 所以就是必须要8个点或9个点才能算对比成功
  • V3.1830: 加入命令
  • V4.2042: 日志参数 showlog 加入 ["显示找到","显示没找到","showfind","shownofind"] 选项