Lua处理鼠标事件

时间:2018-03-07 01:13:31

标签: lua

我不熟悉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

1 个答案:

答案 0 :(得分: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