Lua脚本按键触发的repeat循环中无法检测状态变量变更问题
问题根源
你使用的罗技游戏软件(LGS/G HUB)的Lua脚本运行环境为单线程事件驱动架构:所有OnEvent事件回调需要等当前正在执行的代码逻辑完全结束后才会被调度执行。你按下鼠标3键触发test()后,整个执行流会卡在repeat循环中,此时你按下鼠标2键的事件只会暂存在事件队列中,直到循环跑完11次退出test()后,才会执行对应修改cancel_action的回调逻辑,因此循环内永远读不到变量变更。
解决方案
在循环的每次迭代中调用罗技Lua内置的Sleep()函数让出执行权,Sleep()等待期间脚本环境会主动处理事件队列中暂存的回调,你的按键修改操作就会实时生效。只需在test()的循环内加一行Sleep即可,修改后的代码如下:
function test() count_ = 0 repeat -- 新增该行,参数为等待的毫秒数,可根据你的业务逻辑调整间隔 Sleep(10) count_ = count_ + 1 OutputLogMessage("cancel_action ?") OutputLogMessage(tostring(cancel_action)) if ( cancel_action ) then OutputLogMessage("do something and stop") cancel_action = not cancel_action break else OutputLogMessage("do something else and loop again") end until count_ > 10 end
注意事项
Sleep()的参数可以根据你的循环执行频率调整,不需要高精度响应的场景设置为10~50毫秒即可,避免占用过多资源导致GHUB卡顿。- 不要编写无Sleep的死循环,会导致GHUB无响应,所有输入事件都会被阻塞。
内容的提问来源于stack exchange,提问作者Hylith Rage
相关产品推荐
相关产品推荐

