如何在FindText图像搜索循环中将所有X,Y坐标保存到不同变量
解决方法
在AutoHotkey中可以通过动态变量名或者数组存储两种方式实现你的需求,推荐用数组,适配数量不定的匹配结果,维护成本更低。
修改后的完整代码
#Include <FindText> z:: ;;; 这里是我初始化搜索两个图像来设置搜索范围的代码,运行正常 Text:="|<wcBL_c95>0x0D0D0D@0.95$11.VV8GUI0A0s1U1E+EYADzk" if (ok:=FindText(aX, aY, 0, 0, 1918, 1078, 0, 0, Text)) Text:="|<wcTR_c95>0x0D0D0D@0.95$11.zy64V+1E0k3U6050d2Ekk" if (ok:=FindText(bX, bY, 0, 0, 1918, 1078, 0, 0, Text)) ;;;===> 以上4行代码用于搜索屏幕上的坐标,确定后续循环搜索的范围为aX, bY, bX, aY,你可以忽略这部分内容 ; 新增:初始化存储坐标的数组、动态变量计数器 coords := [] cnt := 0 Loop { Text:="|<wc\_c100>0xD9D4D4@1.00$6.SzzzzSU" if (ok:=FindText(VarX, VarY, aX+11, bY, bX-11, aY, 0, 0, Text)) { ; 修复原代码错误:FindText返回的坐标存在VarX/VarY中,原X/Y为未定义变量 MouseClick, Right, VarX, VarY, 1, 1 ; 方式1:存入数组(推荐) coords.Push({x: VarX, y: VarY}) ; 方式2:生成VarX1/VarY1格式的独立变量(满足你要单独变量的需求) cnt += 1 VarX%cnt% := VarX VarY%cnt% := VarY } else break } ; ========== 调用方式 ========== ; 方式1:用数组遍历,不管匹配到多少个都能自动执行,不用硬写数量 Loop % coords.Length() { MouseMove, coords[A_Index].x, coords[A_Index].y, 1 Sleep, 333 } ; 方式2:用你要的独立变量调用 ; MouseMove, VarX1, VarY1, 1 ; sleep, 333 ; MouseMove, VarX2, VarY2, 1 ; sleep, 333 ; MouseMove, VarX3, VarY3, 1 ; sleep, 333 Return
核心修改说明
- 循环前初始化计数器
cnt,每次匹配成功后计数器自增,用VarX%cnt%的动态变量语法自动生成VarX1/VarX2/VarX3这类独立变量,完全适配不定数量的匹配结果 - 同步提供数组存储方案,后续如果需要调整匹配数量,不用修改调用逻辑,自动适配所有找到的坐标
- 修复了原代码中点击坐标使用未定义变量
X/Y的错误,改用FindText输出的VarX/VarY
内容的提问来源于stack exchange,提问作者SteveMylo
相关产品推荐
相关产品推荐

