Как сохранить все позиции X, Y, найденные в 1 цикле поиска изображений, в разные переменные?

#variables #autohotkey

#переменные #autohotkey

Вопрос:

Как сохранить все позиции X, Y, найденные в одном цикле поиска изображений, в разные переменные?

Мой поиск изображений в цикле находит случайное количество желтых квадратов (на этот раз 3 квадрата, иногда больше). Он щелкает правой кнопкой мыши по желтому квадрату, который затем исчезает (что помогает мгновенно найти следующий квадрат). Он снова щелкает правой кнопкой мыши и так далее. Цикл прерывается, когда больше нет квадратов для поиска (они исчезают один за другим).

Это работает, но как сохранить все 3 найденные позиции как 3 разные переменные (которые будут вызваны позже)? Я могу сделать это без цикла, но мне нужен цикл.

Я использую функцию FINDTEXT от feiyue и не могу изменить код в начале :

     #Include <FindText>
    z::
    ;;; this is just my initial search of two images to set up my search range which works well.
    
    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))
    
    ;;;===> The above 4 lines search for the coordinates on my screen to look at. You can ignore this part, but this gives me the coordinates RANGE to do my loop search in as seen below: aX, bY, bX, aY

 Loop
   {
    Text:="|<wc_c100>0xD9D4D4@1.00$6.SzzzzSU"
    
    if (ok:=FindText(VarX, VarY, aX 11, bY, bX-11, ay, 0, 0, Text))
    
    {
        MouseClick, Right, X, Y, 1, 1  ; This loop finds 3 Sqaures. 
         VarX1:= % X
         VarY1:= % Y   ;  how do I increment these for the next loops?
    }
else break      
}

MouseMove, VarX1, VarY1, 1

sleep, 333

MouseMove, VarX2, VarY2, 1  ;  Doesn't exist (i need to increment varibales in the loop - HELP!)

sleep, 333

MouseMove, VarX3, VarY3, 1  ; Doesn't exist (i need to increment varibales in the loop - HELP!)

Return
 

Комментарии:

1. Хотя это выполнимо в AHK с динамическими переменными, как видно из принятого ответа, вам действительно следует просто использовать, например, массивы .

Ответ №1:

Вы можете просто использовать%A_Index% в своей переменной при присвоении значений «x» и «y»:

 if (ok:=FindText(VarX, VarY, aX 11, bY, bX-11, ay, 0, 0, Text)) {

    MouseClick, Right, X, Y, 1, 1 
    VarX%A_Index%:= X
    VarY%A_Index%:= Y
}
 

Вот пример:

 x= 10
Loop, 10 { 

    x  
    y--

    VarX%A_Index%   := X
    VarY%A_Index%   := Y  
}
    
MsgBox  %   VarX1       "`t"    VarY1       "`n"
        .   VarX2       "`t"    VarY2       "`n"
        .   VarX3       "`t"    VarY3       "`n"
        .   VarX4       "`t"    VarY4       "`n"
        .   VarX5       "`t"    VarY5       "`n"
        .   VarX6       "`t"    VarY6       "`n"
        .   VarX7       "`t"    VarY7       "`n"
        .   VarX8       "`t"    VarY8       "`n"
        .   VarX9       "`t"    VarY9       "`n"
        .   VarX10      "`t"    VarY10