我在这里使用罗技鼠标的脚本有点小问题。我将在游戏中将其用于农业。
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
for i = 0, 300 do
PressAndReleaseKey("f9")
Sleep(400)
PressAndReleaseKey("enter")
Sleep(600)
PressAndReleaseKey("f5")
Sleep(50)
PressMouseButton(1)
Sleep(50)
ReleaseMouseButton(1)
end
PressAndReleaseKey("1")
repeat
until IsMouseButtonPressed(3)
end
end因此,它将循环300次,然后在完成时按1,然后再次重复300次循环,依此类推。我面临的问题是,当我试图中止脚本时,它会首先完成for循环,然后使用右键按钮(IsMouseButtonPressed(3))停止,这真的很难计时(300x是很多)
如何在for循环期间暂停/停止它,这是可能的吗?
发布于 2021-01-07 00:14:32
经常检查按钮是否被按下并中断循环。
打破那些长时间的阻塞睡眠。
而不是Sleep(400),考虑做一些类似这样的事情
for i = 1, 400, 50 do
Sleep(50)
if IsMouseButtonPressed(3) then break end
end发布于 2021-01-07 00:17:59
当使用IsMouseButtonPressed(3)时,可以使用break跳出for循环
for i = 0, 300 do
if IsMouseButtonPressed(3) then
break -- exit for loop.
end
PressAndReleaseKey("f9")
Sleep(400)
PressAndReleaseKey("enter")
Sleep(600)
PressAndReleaseKey("f5")
Sleep(50)
PressMouseButton(1)
Sleep(50)
ReleaseMouseButton(1)
end这样做意味着您可以预期由于睡眠调用而导致的最大延迟1.1秒,以便注册退出。
您可以通过添加一个在睡眠间隔期间轮询IsMouseButtonPressed(3)的函数来更改代码。
local function MousePollingSleep(time)
loopCount = time / 50
for i = loopCount, 0, -1 do
if IsMouseButtonPressed(3) then
return false
end
sleepTime = (i >= 1 and 1 or i) * 50
Sleep(sleepTime)
end
return true
end并将for循环更改为
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
repeat
for i = 0, 300 do
PressAndReleaseKey("f9")
if MousePollingSleep(400) == false then break end
PressAndReleaseKey("enter")
if MousePollingSleep(600) == false then break end
PressAndReleaseKey("f5")
if MousePollingSleep(50) == false then break end
PressMouseButton(1)
if MousePollingSleep(50) == false then break end
ReleaseMouseButton(1)
end
ReleaseMouseButton(1)
PressAndReleaseKey("1")
until IsMouseButtonPressed(3)
end
endhttps://stackoverflow.com/questions/65599134
复制相似问题