问题描述
我的脚本在这里使用罗技鼠标时遇到了一点问题。我将在游戏中使用它进行耕作。
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 循环期间暂停/停止它,可能吗?
解决方法
经常检查按钮是否被按下并打破循环。
打破那些长时间阻塞的睡眠。
而不是Sleep(400)
考虑做类似的事情
for i = 1,400,50 do
Sleep(50)
if IsMouseButtonPressed(3) then break end
end
,
当 break
IsMouseButtonPressed(3)
跳出 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,-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
end