2013-03-07 117 views
1

我正在編寫魔獸世界插件的中間,我希望插件能夠基於按鍵或按鍵的組合執行某些功能。大多數主要國家的保護魔獸世界API函數,但現在下仍然能夠通過插件可以使用:使用Lua檢測鍵盤按鍵的組合

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都被按下。我的問題更多的是算法。有沒有更好的方式來執行這個程序化?

回答

0

對我來說聽起來很有聲音。

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

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

然後,你可以打電話keys.altkeys["alt"]來看看它的壓制。

更具可讀性?大概。更高效?不見得。但是當我談到Lua的表現時,我不是很瞭解。

我只是在KeyCombos函數上面添加註釋塊,說明每種可能的組合及其含義。

As a side note, it's Lua, not LUA.

+0

謝謝Netfangled,另外我編輯LUA給Lua。謝謝你的提示:)。 – 2013-03-08 02:06:12

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 

會好很多。在WoW中,所有AddOns共享相同的全球環境,因此最好保持清潔。