使用Lua检测键盘按键的组合(Using Lua to detect a combination o

2019-10-17 19:30发布

我在写魔兽插件的世界中,我想的插件能够基于一个按键或按键的组合来执行某些功能。 大多数主要国家现在保护魔兽世界API函数,但以下仍然能够通过插件使用:

IsAltKeyDown()
IsControlKeyDown()
IsShiftKeyDown()

我希望能够做的是执行基于这些向下的任意一个键或有组合的功能。

这是我有工作:

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中,作为上述功能正在工作,我可以检查是否总和等于6例如,看是否控制和Alt键都按下。 我的问题是更多的算法之一。 有没有执行此programmaticly更好的办法?

Answer 1:

如果你要使用一个表,在一般情况下,它会好得多,保持相同的表。

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

会好得多。 在魔兽世界全部扩展共享相同的全球环境所以最好保持干净。



Answer 2:

似乎是相当的声音给我了。

作为替代方案,但是,你可以使用一个表:

function KeyCombos()
    keys = {
        shift = IsShiftKeyDown(),
        control = IsControlKeyDown(),
        alt = IsAltKeyDown(),
    }
end

然后,你可以打电话keys.altkeys["alt"]看看它是否按下。

更具可读性? 大概。 更高效? 不见得。 但我不是很熟悉,当涉及到Lua的性能。

我只想补充上面的注释块KeyCombos功能说明每一种可能的组合是什么意思。

作为一个侧面说明,它是Lua中,而不是LUA。



文章来源: Using Lua to detect a combination of keyboard key presses