我在写魔兽插件的世界中,我想的插件能够基于一个按键或按键的组合来执行某些功能。 大多数主要国家现在保护魔兽世界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更好的办法?
如果你要使用一个表,在一般情况下,它会好得多,保持相同的表。
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
会好得多。 在魔兽世界全部扩展共享相同的全球环境所以最好保持干净。
似乎是相当的声音给我了。
作为替代方案,但是,你可以使用一个表:
function KeyCombos()
keys = {
shift = IsShiftKeyDown(),
control = IsControlKeyDown(),
alt = IsAltKeyDown(),
}
end
然后,你可以打电话keys.alt
或keys["alt"]
看看它是否按下。
更具可读性? 大概。 更高效? 不见得。 但我不是很熟悉,当涉及到Lua的性能。
我只想补充上面的注释块KeyCombos
功能说明每一种可能的组合是什么意思。
作为一个侧面说明,它是Lua中,而不是LUA。