AutoHotKey - 重复 if 语句在循环中一直将其条件视为 true
AutoHotKey - repeating if statement keeps treating its condition as true in a loop
我正在尝试使用 AutoHotKey 为具有钓鱼系统的游戏创建自动点击器。该系统会在您的头顶上方出现一个黑色感叹号图标,周围环绕着一个大的白色方形边框,此时您必须左键单击才能抓到鱼。由于图标出现的时间每次都 运行 完全不同,我必须能够动态确定垃圾点击的时间。
我已经尝试使用 PixelGetColor(如下所示)找到一个特定的像素,每当出现感叹号时它就会变成白色,但它从未检测到感叹号,更令人担忧的是,无论何时它检测到我屏幕上的特定像素为白色,PixelGetColor 之后的 if 语句条件始终 returns 为真。
Toggle = False
loop
{
if (Toggle = "true")
{
Sleep, 100
PixelGetColor, color, 966, 463
if (color = 0xFFFFFFFF) {
MsgBox, It works!
}
}
}
F1::
if (Toggle = "true") {
Toggle = False
}
else {
Toggle = True
}
F1 绑定到一个布尔值,它确定循环内的代码是否为 运行。 PixelGetColor 的最后两个输入,966 和 463,分别是特定像素的 x 和 y 位置。
一旦我开始在游戏中移动我的相机,我希望获得不同的颜色值,但在它检测到白色后,它继续向关于脚本 'working' 的消息发送垃圾邮件,而它显然没有.
简单来说,这到底是怎么回事?一段时间以来,我一直在努力弄清楚这一点。如果有人可以解释我做错了什么,以及在循环内 应该 完成什么以使程序按预期工作的代码片段,我会永远(嗯,几乎)感激。
当我按原样 运行 您的代码时,我在按 F1 后没有收到消息框。 (我确保指定坐标处的像素是白色的。)将颜色匹配更改为“0xFFFFFF”(每个 RGB 两个字节)使它对我有用并且它按照你在描述中的预期工作。
但是,我很惊讶它的工作原理,因为 true/false 被存储为变量 Toggle
中的字符串,我完全预计 "True" 不会匹配 "true" 因为的情况差异。 (经过更多挖掘,我发现表达式中的 =
不区分大小写;==
区分大小写 - 我想我今天学到了一些东西。)
除了颜色,我在代码中没有看到任何会阻止它工作的东西。下面是您的修改版本,将 true/false 视为布尔值并略有简化。希望它也对你有用。
Loop
{
If Toggle
{
Sleep , 100
PixelGetColor , color , 966 , 463
If ( color = 0xFFFFFF )
MsgBox ,,, It works! , 0.5
} }
f1::Toggle := !Toggle
编辑: 添加区域和方差以根据下面的评论进行搜索。
用下面的两行替换 PixelGetColor
和 If
语句行。
PixelSearch ,,, 900 , 400 , 1000 , 500 , 0xFFFFFF , 20 , FastRGB
If !ErrorLevel
这将在 100x100 像素的区域中搜索具有 20 种色差的纯白色。您可能需要调整矩形大小和位置以及方差以使其适合您。更多信息 here.
我正在尝试使用 AutoHotKey 为具有钓鱼系统的游戏创建自动点击器。该系统会在您的头顶上方出现一个黑色感叹号图标,周围环绕着一个大的白色方形边框,此时您必须左键单击才能抓到鱼。由于图标出现的时间每次都 运行 完全不同,我必须能够动态确定垃圾点击的时间。
我已经尝试使用 PixelGetColor(如下所示)找到一个特定的像素,每当出现感叹号时它就会变成白色,但它从未检测到感叹号,更令人担忧的是,无论何时它检测到我屏幕上的特定像素为白色,PixelGetColor 之后的 if 语句条件始终 returns 为真。
Toggle = False
loop
{
if (Toggle = "true")
{
Sleep, 100
PixelGetColor, color, 966, 463
if (color = 0xFFFFFFFF) {
MsgBox, It works!
}
}
}
F1::
if (Toggle = "true") {
Toggle = False
}
else {
Toggle = True
}
F1 绑定到一个布尔值,它确定循环内的代码是否为 运行。 PixelGetColor 的最后两个输入,966 和 463,分别是特定像素的 x 和 y 位置。
一旦我开始在游戏中移动我的相机,我希望获得不同的颜色值,但在它检测到白色后,它继续向关于脚本 'working' 的消息发送垃圾邮件,而它显然没有.
简单来说,这到底是怎么回事?一段时间以来,我一直在努力弄清楚这一点。如果有人可以解释我做错了什么,以及在循环内 应该 完成什么以使程序按预期工作的代码片段,我会永远(嗯,几乎)感激。
当我按原样 运行 您的代码时,我在按 F1 后没有收到消息框。 (我确保指定坐标处的像素是白色的。)将颜色匹配更改为“0xFFFFFF”(每个 RGB 两个字节)使它对我有用并且它按照你在描述中的预期工作。
但是,我很惊讶它的工作原理,因为 true/false 被存储为变量 Toggle
中的字符串,我完全预计 "True" 不会匹配 "true" 因为的情况差异。 (经过更多挖掘,我发现表达式中的 =
不区分大小写;==
区分大小写 - 我想我今天学到了一些东西。)
除了颜色,我在代码中没有看到任何会阻止它工作的东西。下面是您的修改版本,将 true/false 视为布尔值并略有简化。希望它也对你有用。
Loop
{
If Toggle
{
Sleep , 100
PixelGetColor , color , 966 , 463
If ( color = 0xFFFFFF )
MsgBox ,,, It works! , 0.5
} }
f1::Toggle := !Toggle
编辑: 添加区域和方差以根据下面的评论进行搜索。
用下面的两行替换
PixelGetColor
和 If
语句行。
PixelSearch ,,, 900 , 400 , 1000 , 500 , 0xFFFFFF , 20 , FastRGB
If !ErrorLevel
这将在 100x100 像素的区域中搜索具有 20 种色差的纯白色。您可能需要调整矩形大小和位置以及方差以使其适合您。更多信息 here.