如何在 LUA 中绑定按键或防止 IsMouseButtonPressed 读取 PressAndReleaseMouseButton 事件?

正如标题所述,我需要能够执行其中的两个操作,但不知道如何执行。基本上我的问题是,如果脚本本身正在使用“PressAndReleaseMouseButton(1)”,则不能使用“IsMouseButtonPressed(1)”来确定是否执行脚本的一部分。

因此,我需要一种方法在脚本期间让我的鼠标按钮执行其他操作,或者我需要防止“IsMouseButtonPressed(1)”读取诱发的鼠标单击。我真的只希望它检查物理鼠标的状态。这是可能的吗?我正在使用 Logitech 游戏软件中的 LUA。

编辑:我正在添加一个使用我从 Joseph 学到的内容的示例代码。我不知道为什么这不起作用。幸运的是,没有错误。

local fakePressStatus = {}

local function IsMouseButtonReallyPressed(b)
    return fakePressStatus[b] == nil and IsMouseButtonPressed(b)
end

local function FakePressAndReleaseMouseButton(b)
    fakePressStatus[b] = (fakePressStatus[b] or 0) + 1
    PressAndReleaseMouseButton(b)
end

function OnEvent(event, arg)
    if event == "MOUSE_BUTTON_RELEASED" then
        if fakePressStatus[b] == 1 then
            fakePressStatus[b] = nil
        elseif fakePressStatus[b] ~= nil then
            fakePressStatus[b] = fakePressStatus[b] - 1
        end
    end

    if IsMouseButtonReallyPressed(1) then
        for i = 0, 10 do
            if IsMouseButtonReallyPressed(1) then
                FakePressAndReleaseMouseButton(1)
                Sleep (100)
            else
                i = 10
            end
        end
    end
end
点赞
用户7509065
用户7509065

以下是中文翻译并且保留原本的 markdown 格式:

设置变量来追踪假按下/释放的状态,像这样:

local fakePressStatus = {}

local function IsMouseButtonReallyPressed(b)
    return fakePressStatus[b] == nil and IsMouseButtonPressed(b)
end

local function FakePressAndReleaseMouseButton(b)
    fakePressStatus[b] = (fakePressStatus[b] or 0) + 1
    PressAndReleaseMouseButton(b)
end

EnablePrimaryMouseButtonEvents(true)

function OnEvent(event, arg)
    if event == "MOUSE_BUTTON_RELEASED" then
        if fakePressStatus[b] == 1 then
            fakePressStatus[b] = nil
        elseif fakePressStatus[b] ~= nil then
            fakePressStatus[b] = fakePressStatus[b] - 1
        end
    end
end

然后在任何需要使用PressAndReleaseMouseButtonIsMouseButtonPressed的地方,只需使用FakePressAndReleaseMouseButtonIsMouseButtonReallyPressed

2020-05-17 03:08:24
用户1847592
用户1847592

我需要防止“IsMouseButtonPressed(1)”读取一个人为的鼠标点击。

这是不可能的。

但是有一个变通方法:可以为同一个操作添加替代按钮作为LMB。

例如,如果LMB表示“开火”,则在游戏中添加键“P”作为开火的替代方式。

如果事件 ==“MOUSE_BUTTON_PRESSED”和参数== 1,那么
     对于i = 010 do
         睡眠(100)
         如果不是IsMouseButtonPressed(1),则打破结束
         按键(“P”)
         睡眠(20)
         释放键(“P”)
     结束
 结束如果

您可以通过按下LMB进行第一枪,而脚本将通过在循环中编程按下“P”来进行第2、第3、……发射。

2020-05-19 01:08:41