You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 04:18:14