首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logitech Lua脚本和循环

Logitech Lua脚本和循环
EN

Stack Overflow用户
提问于 2021-01-07 00:02:11
回答 2查看 702关注 0票数 1

我在这里使用罗技鼠标的脚本有点小问题。我将在游戏中将其用于农业。

代码语言:javascript
复制
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循环期间暂停/停止它,这是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-07 00:14:32

经常检查按钮是否被按下并中断循环。

打破那些长时间的阻塞睡眠。

而不是Sleep(400),考虑做一些类似这样的事情

代码语言:javascript
复制
for i = 1, 400, 50 do
  Sleep(50)
  if IsMouseButtonPressed(3) then break end
end
票数 0
EN

Stack Overflow用户

发布于 2021-01-07 00:17:59

当使用IsMouseButtonPressed(3)时,可以使用break跳出for循环

代码语言:javascript
复制
    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)的函数来更改代码。

代码语言:javascript
复制
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循环更改为

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65599134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档