繁体   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