You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:06:04