[英]AutoHotkey ImageSearch not detecting image
我正在尝试使用 AutoHotkey 制作一个机器人来为我玩一款名为BTD6的游戏。
问题是我需要检测胜利屏幕何时出现,然后单击一个按钮。 所以我尝试使用ImageSearch
在While
循环中搜索按钮,但循环永远不会结束。
我在下面制作了测试脚本,它工作正常:
#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.