簡體   English   中英

AutoHotkey ImageSearch 未檢測到圖像

[英]AutoHotkey ImageSearch not detecting image

我正在嘗試使用 AutoHotkey 制作一個機器人來為我玩一款名為BTD6的游戲。

問題是我需要檢測勝利屏幕何時出現,然后單擊一個按鈕。 所以我嘗試使用ImageSearchWhile循環中搜索按鈕,但循環永遠不會結束。

我在下面制作了測試腳本,它工作正常:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.


^b::
ImageSearch, ix, iy, 0, 0, A_ScreenWidth, A_ScreenHeight, next.png
Click, %ix% %iy%
Return


Escape::
ExitApp
Return

但是當我把它放在主要的機器人代碼中時,它不起作用,我認為這是因為循環永遠不會退出:
(滾動到代碼底部)

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.


CoordMode Pixel


^b::
While true {
    Click, 1223 1553
    Sleep, 1000
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 2581 693
    Sleep, 100
    Click, 801 1097
    Sleep, 1000
    Click, 882 668
    Sleep, 1000
    Click, 1994 720
    Sleep, 5000
    Click, 1444 1265,
    Sleep, 1000
    Send {k down}{k up}
    MouseMove, 2381, 1100, 20
    Sleep, 100
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Send {, down}{, up}
    Sleep, 100
    Send {, down}{, up}
    Sleep, 100
    Send {/ down}{/ up}
    Sleep, 100
    Send {/ down}{/ up}
    Sleep, 1000
    Click, 1453 816
    Sleep, 1000
    Send {z down}{z up}
    MouseMove, 2281, 971, 20
    Sleep, 100
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Send {. down}{. up}
    Sleep 100
    Send {. down}{. up}
    Sleep 100
    Send {/ down}{/ up}
    Sleep 100
    Send {/ down}{/ up}
    Sleep 100
    Send {/ down}{/ up}
    Sleep 100
    Send {/ down}{/ up}
    Sleep 100
    Click, 1453 816
    Sleep, 1000
    Send {f down}{f up}
    MouseMove, 2397, 967, 20,
    Sleep, 100
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Send {, down}{, up}
    Sleep 100
    Send {, down}{, up}
    Sleep 100
    Send {, down}{, up}
    Sleep 100
    Send {, down}{, up}
    Sleep 100
    Send {. down}{. up}
    Sleep 100
    Send {. down}{. up}
    Sleep 100
    Click, 1453 816
    Sleep, 1000
    Send {Space down}{Space up}
    Sleep, 1000
    While true {
        ImageSearch, foundx, foundy, 0, 0, A_ScreenWidth, A_ScreenHeight, next.png
        if (foundx or foundy) {
            Break
        } else {
            Sleep, 2000
        }
    }
    Click, %foundx% %foundy%
    foundx := 0
    foundy := 0
    Sleep, 1000
    Click, 1002 1419
    Sleep, 5000
}
Return

    
Escape::
ExitApp
Return

好的,所以我將您的代碼與 SetTimer 一起使用,而不是嘗試使用連續循環。 應該產生與連續循環相同的效果。

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.


CoordMode, Pixel

^b::
SetTimer, PlayGame, -10
Return

PlayGame:
Click, 1223 1553
Sleep, 1000
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 2581 693
Sleep, 100
Click, 801 1097
Sleep, 1000
Click, 882 668
Sleep, 1000
Click, 1994 720
Sleep, 5000
Click, 1444 1265,
Sleep, 1000
Send {k down}{k up}
MouseMove, 2381, 1100, 20
Sleep, 100
Click
Sleep, 1000
Click
Sleep, 1000
Send {, down}{, up}
Sleep, 100
Send {, down}{, up}
Sleep, 100
Send {/ down}{/ up}
Sleep, 100
Send {/ down}{/ up}
Sleep, 1000
Click, 1453 816
Sleep, 1000
Send {z down}{z up}
MouseMove, 2281, 971, 20
Sleep, 100
Click
Sleep, 1000
Click
Sleep, 1000
Send {. down}{. up}
Sleep 100
Send {. down}{. up}
Sleep 100
Send {/ down}{/ up}
Sleep 100
Send {/ down}{/ up}
Sleep 100
Send {/ down}{/ up}
Sleep 100
Send {/ down}{/ up}
Sleep 100
Click, 1453 816
Sleep, 1000
Send {f down}{f up}
MouseMove, 2397, 967, 20,
Sleep, 100
Click
Sleep, 1000
Click
Sleep, 1000
Send {, down}{, up}
Sleep 100
Send {, down}{, up}
Sleep 100
Send {, down}{, up}
Sleep 100
Send {, down}{, up}
Sleep 100
Send {. down}{. up}
Sleep 100
Send {. down}{. up}
Sleep 100
Click, 1453 816
Sleep, 1000
Send {Space down}{Space up}
Sleep, 1000
Loop {
    ImageSearch, foundx, foundy, 0, 0, A_ScreenWidth, A_ScreenHeight, next.png
    if (ErrorLevel==0) {
        Break
    } ; else not needed because of Break above
    Sleep, 2000
}
Click, %foundx% %foundy%
foundy := foundx := 0
Sleep, 1000
Click, 1002 1419
Sleep, 5000
setTimer, %A_ThisLabel%, -10
Return

    
Escape::
ExitApp
Return

雖然我自己從不編寫游戲腳本,但有更好的方法可以做到這一點,但我會在您學習更多語言時讓您明白這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM