如何实现鼠标光标连续移动?Logitech G系列Lua脚本问题求助
问题描述
1. 子弹发射逻辑提前终止
编写了30发子弹的执行逻辑,但实际仅能运行前两三发就停止。核心原因是在子弹发射流程未完成时就调用了ReleaseMouseButton(3),尝试通过Sleep(50)增加延迟的效果微弱,且不符合实际子弹发射的间隔需求。
2. 鼠标偏移操作互相干扰
连续调用MoveMouseRelative时,后续偏移会叠加干扰之前的操作,例如:
MoveMouseRelative(0, 0) Sleep(10) MoveMouseRelative(0, 15) Sleep(10) MoveMouseRelative(0, 5)
第三个调用会影响第二个的实际效果,第二个又干扰第一个,导致新增偏移时必须调整所有原有偏移,操作繁琐且不符合预期逻辑。
解决方案
针对问题1:修正鼠标按键释放时机
- 移除代码中提前调用的
ReleaseMouseButton(3),将终止逻辑的控制权交给repeat-until循环的条件(until not IsMouseButtonPressed(3)),确保只有用户主动松开鼠标按键3时才停止流程,而非代码强制中断。 - 保留每一组子弹逻辑后的
if not IsMouseButtonPressed(3) then break end,这样用户中途松开按键可立即终止,同时保证30发逻辑能完整执行。
针对问题2:优化鼠标偏移计算
- 避免依赖连续
MoveMouseRelative的叠加效果实现目标偏移,改为直接计算每一步的相对增量,单次调用函数到达目标位置;或者维护一个累计偏移变量,每次计算相对于初始位置的总偏移后再调用函数。 - 示例优化:若要实现总偏移
(0,20),无需分三次调用,直接使用MoveMouseRelative(0,20)即可;若需分步移动,确保每一步的偏移是相对于当前位置的正确增量。
修正后的完整代码
function OnEvent(event, arg) EnablePrimaryMouseButtonEvents(true) if IsMouseButtonPressed(3) then repeat -- 第1-5发逻辑 MoveMouseRelative(0, 15) Sleep(50) MoveMouseRelative(0, 40) Sleep(50) MoveMouseRelative(0, 30) Sleep(90) Sleep(100) Sleep(10) if not IsMouseButtonPressed(3) then break end -- 第6-10发逻辑 MoveMouseRelative(0, 6) Sleep(10) MoveMouseRelative(0, 6) Sleep(10) MoveMouseRelative(0, 6) Sleep(10) MoveMouseRelative(0, 6) Sleep(10) MoveMouseRelative(0, 6) Sleep(10) if not IsMouseButtonPressed(3) then break end -- 第11-15发逻辑 MoveMouseRelative(0, 6) Sleep(10) MoveMouseRelative(0, 7) Sleep(10) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) if not IsMouseButtonPressed(3) then break end -- 第16-20发逻辑 MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) if not IsMouseButtonPressed(3) then break end -- 第21-25发逻辑 MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) if not IsMouseButtonPressed(3) then break end -- 第26-30发逻辑 MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) MoveMouseRelative(0, 7) Sleep(15) until not IsMouseButtonPressed(3) end end
注:原代码中存在MoveMouseRelative(0.15)这类参数缺失的错误调用,已修正为符合Logitech Lua API要求的双参数格式。
内容的提问来源于stack exchange,提问作者John House
相关产品推荐
相关产品推荐

