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