我正在用LUA / logitech脚本API编写脚本。该脚本应执行以下操作:
forceMove = false
on = false
function OnEvent(event, arg)
--OutputLogMessage("event = %s, arg = %s\n", event, arg);
if IsMouseButtonPressed(5) then
forceMove = not forceMove
while(on) do
if(forceMove) then
ForceMove()
else
StartAttack()
end
end
ReleaseMouseButton(5)
end
if IsMouseButtonPressed(4) then
on = not on
ReleaseMouseButton(4)
end
end
function StartAttack()
PressAndReleaseMouseButton(1)
Sleep(1000)
end
function ForceMove()
MoveMouseWheel(1)
Sleep(20)
MoveMouseWheel(-1)
end
但是一旦在游戏中,如果我用鼠标按钮4激活脚本,我会陷入“强制移动”模式,“自动攻击”模式永远不会起作用。无法理解为什么。
答案 0 :(得分:1)
按下鼠标按钮5时,激活“强制移动”模式。如果同时启用“开启”模式,则会导致无限循环:
while(on) do
if(forceMove) then
ForceMove()
else
StartAttack()
end
end -- loops regardless of mouse buttons
无论您按下哪个鼠标按钮,您都将永远留在这里。 您需要从鼠标事件处理程序中移出执行代码。处理程序应该只更新像forceMove这样的值,执行操作需要另一个函数。在这些功能中,您只执行一步,而不是很多步骤。 然后再次检查按下的鼠标按钮,执行操作等。 代码示例:
function update()
if IsMouseButtonPressed(4) then
on = not on
end
if IsMouseButtonPressed(5) then
forceMove = not forceMove
end
end
function actions()
if on then
if forceMove then
ForceMove()
end
end
end
如何将它组合在一起: 你必须使用某种循环,但理想情况下游戏引擎应该为你做这个。它看起来像这样:
local is_running = true
while is_running do
update()
actions()
end
现在,如果按下某个按钮,则会将当前状态保存在某些全局变量中,这些变量可通过更新和操作进行访问。每个周期调用函数(可以是一帧的计算)。假设您没有按任何其他按钮,则update()不执行任何操作,因此forceMove
和on
保持不变。
通过这种方式,您可以在没有循环操作的情况下进行连续移动()。