【问题标题】:Lua handling mouse eventLua 处理鼠标事件
【发布时间】:2018-08-15 00:09:20
【问题描述】:

我对lua不熟悉,只是写了一些lua脚本给罗技鼠标玩游戏.....

这是我的预期: 当我按下鼠标上的某个键时,它开始在键盘上按“1”,当我再次按下鼠标键时,它就停止了。

这是我尝试过的: 我使用全局标志来跟踪开关,但一旦开始就不会停止......我不知道lua如何处理事件,我认为全局标志不是一个好主意。那么有没有更好的方法呢?

代码如下:

on = 0
cd = 50

function shift_example() 
    while on do
        PressAndReleaseKey("1")
        Sleep(cd)
    end 
end


function OnEvent(event, arg) 
    OutputLogMessage("event = %s, arg = %s\n", event, arg) 
    if (event == "MOUSE_BUTTON_PRESSED" and arg == 5 and on ==0) then 
        OutputLogMessage("set on = true\n") 
        on = 1
        shift_example() 
    end 
    if (event == "MOUSE_BUTTON_PRESSED" and arg == 5 and on == 1) then 
        OutputLogMessage("set on = false\n") 
        on = 0
    end 

end

【问题讨论】:

  • 你说它开始和停止,在下一句中你说它开始并且不会停止。那现在怎么样了?
  • @Piglet 很抱歉造成混乱。我期望它可以在我按下鼠标键时开始和停止。最后一句话是我脚本的实际行为。我已经更新了我的问题

标签: lua


【解决方案1】:

您的脚本正忙于运行循环。运行循环时它不会处理任何事件。

每次在循环中使用IsMouseButtonPressed(1) 轮询按钮状态,并在下一个 0-1 转换时中断循环。 您的更新速度当然会受到延迟的限制。

用小循环替换较长的延迟,这些小循环经常检查具有短延迟的按钮状态。

编辑:添加示例

我没有任何罗技硬件,因此无法对其进行测试。 此代码应在您单击鼠标按钮 5 后开始向密钥 1 发送垃圾邮件,并在您再次单击它时停止。这是一种非常简单的方法,不存储任何按钮状态。相反,它只是在按下按钮时做一些事情,然后在按下按钮之前做同样的事情。第二次单击将导致第二个循环结束,您可以处理新事件。

function Button5Loop()
   -- we are here because the button was pressed so it should still be pressed
   -- so we can start doing something as long as the button is pressed
   -- but this time we check the button state in every loop cycle
   while IsMouseButtoPressed(5) do
    PressAndReleaseKey("1")
    Sleep(50)
   end
   -- the button not pressed anymore so it has been released
   -- so we continue spamming in a second loop
   -- until the button is pressed again
   repeat
     PressAndReleaseKey("1")
     Sleep(50)
   until IsMouseButtonPressed(5) 
end

function OnEvent(event, arg) 
    OutputLogMessage("event = %s, arg = %s\n", event, arg) 
    -- mousebutton 5 has been pressed
    if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then 
        Button5Loop() 
    end
end

【讨论】:

  • 你能写一些示例代码吗?我已经尝试过你的想法,但它不起作用......我想我没有做对......
  • @ZiqiLiu 添加了一个小例子。我希望它有效,我无法测试它
  • 我尝试了您的代码,稍作修改,效果很好!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多