如何创建c_pressed条件?同一arg=5区分M/Mc逻辑Lua脚本求助
问题解答
当前脚本的问题
- 你写的
"c_pressed"是字符串常量,在Lua中非空字符串永远为真,再加上它和前面arg==5的分支是elseif互斥关系,程序只会执行第一个匹配的分支,所以带"c_pressed"的分支永远不会触发。 - 没有正确判断C键按下的逻辑,应该用脚本API提供的
IsKeyPressed()函数。 - 变量
S未用local声明,会变成全局变量,可能引发意外问题。 - 两个
arg==5的分支逻辑重复且互斥,无法实现“同一按键对应两种逻辑”的需求。
如何创建C键按下的触发条件
直接使用Logitech G脚本的IsKeyPressed("c")函数,该函数返回布尔值:C键按下时返回true,否则返回false。注意参数为小写的"c"。
实现同一arg=5对应两种逻辑的方案
把两个arg==5的分支合并,在分支内部判断C键是否按下,以此切换M和Mc的状态:
- 按下arg=5且C键未按下时,启用M逻辑、关闭Mc逻辑
- 按下arg=5且C键按下时,启用Mc逻辑、关闭M逻辑
修改后的完整脚本
local M_coords = {{ x = 0, y = 7 }} local Mc_coords = {{ x = 0, y = 5}} local M = false local Mc = false local S = 11 -- 声明为局部变量,避免全局污染 function OnEvent(event, arg) if event == "PROFILE_ACTIVATED" then EnablePrimaryMouseButtonEvents(true) elseif event == "MOUSE_BUTTON_PRESSED" and arg == 7 then M = false Mc = false elseif event == "MOUSE_BUTTON_PRESSED" and arg == 5 then -- 根据C键状态切换逻辑分支 if IsKeyPressed("c") then M = false Mc = true else M = true Mc = false end S = 11 elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and M then local dy = 0 repeat for i, v in ipairs(M_coords) do suppress(v.x , v.y + dy) end dy = dy + 0.011 until not IsMouseButtonPressed(1) elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and Mc then local dy = 0 repeat for i, v in ipairs(Mc_coords) do suppress(v.x , v.y + dy) end dy = dy + 0.011 until not IsMouseButtonPressed(1) end end
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

