使用Lua检测键盘按键组合 我正在编写魔兽世界艾登,我希望AdDon能够根据按键或按键组合来执行某些功能。大多数关键状态现在都是受保护的WoW API函数,但以下仍然可以由插件使用: IsAltKeyDown() IsControlKeyDown() IsShiftKeyDown()

使用Lua检测键盘按键组合 我正在编写魔兽世界艾登,我希望AdDon能够根据按键或按键组合来执行某些功能。大多数关键状态现在都是受保护的WoW API函数,但以下仍然可以由插件使用: IsAltKeyDown() IsControlKeyDown() IsShiftKeyDown(),lua,add-on,world-of-warcraft,Lua,Add On,World Of Warcraft,我想能够做的是执行一个功能的基础上,任何一个键向下或组合有 这就是我的工作: function KeyCombos() total = 0 if IsShiftKeyDown() then total = total + 1 end if IsControlKeyDown() then total = total + 2 end if IsAltKeyDown() then total = total

我想能够做的是执行一个功能的基础上,任何一个键向下或组合有

这就是我的工作:

function KeyCombos()
    total = 0
    if IsShiftKeyDown() then
        total = total + 1
    end
    if IsControlKeyDown() then
        total = total + 2
    end
    if IsAltKeyDown() then
        total = total + 4
    end
end

现在我的问题不一定是关于Lua的,因为上面的函数正在工作,例如,我可以检查total是否等于6,看看Control和Alt是否都被按下。我的问题更多的是一个算法问题。有更好的方法来执行这个程序吗?

对我来说似乎已经很合理了

但是,您也可以使用以下表格:

function KeyCombos()
    keys = {
        shift = IsShiftKeyDown(),
        control = IsControlKeyDown(),
        alt = IsAltKeyDown(),
    }
end
然后,您可以调用
keys.alt
keys[“alt”]
查看是否按下了它

更具可读性?可能更有效率?不太可能。但我对Lua的表演不是很了解

我只想在
KeyCombos
函数上方添加一个注释块,说明每个可能的组合及其含义


如果要使用一个表,一般情况下最好保持同一个表

function KeyCombos()
    keys = keys or {}

    keys.shift = IsShiftKeyDown()
    keys.control = IsControlKeyDown()
    keys.alt = IsAltKeyDown()
end
或者,如果你愿意的话

function KeyCombos()
    if not keys then
        keys = {}
    end

    keys.shift = IsShiftKeyDown()
    keys.control = IsControlKeyDown()
    keys.alt = IsAltKeyDown()
end
然而,问题中的原始示例使用整数数学的性能要高得多


然而,这些示例都创建了全局。因此:

function GetKeyCombos()
    local keys = 0

    if IsShiftKeyDown() then
        keys = keys + 1
    end
    if IsControlKeyDown() then
        keys = keys + 2
    end
    if IsAltKeyDown() then
        keys = keys + 4
    end

    return keys
end

那就好多了。在《魔兽世界》中,所有插件共享相同的全球环境,因此最好保持其干净。

谢谢你的网方,此外,我还对LUA-to-LUA进行了编辑。谢谢你的提示:)。