2010-10-28 19 views
0

我將需要處理一個鋼琴鍵,它可以在沒有高CPU負荷的情況下儘可能快地做出響應,在Flex應用程序中使用虛擬鋼琴重複按鍵和釋放。哪一個是有效的:開關,如果或功能?

調用函數是否有效或切換?

實施例:

switch(keyNote) 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 

function() { 
if (keyNote=='c4'){keypress.button=down} 
if (keyNote=='c4'){keypress.button=down} 
if (keyNote=='c4'){keypress.button=down} 
if (keyNote=='c4'){keypress.button=down} 
} 

function c4_Key() { 
keypress.button=down; 
} 

我還不知道是否有使用dispatchevent另一方法調用由ID的按鈕,設置按鈕,向下狀態?

+0

我不知道這是可能的動作,但我會建議一個哈希表。 – Andrey 2010-10-28 14:31:02

+3

要小心過早的優化 - 直到你知道存在問題,不要修復性能瓶子。首先對您的應用程序進行配置,然後優化實際放緩的應用程序。 – KevinDTimm 2010-10-28 14:32:25

+1

考慮到你以前的問題,我懷疑這是你的性能問題所在...... – 2010-10-28 14:59:22

回答

4

不要用你自己的,如果,如果,如果功能。編譯器不喜歡選項 我會做一個字典對象,這樣你可以得到這樣的迴應(例如,如果可以爲true或false):

var keyMap:Dictinary = new Dictionary() 
//Here you would populate the dictionary with the diff. keys and values 

//pseudo body of keyDown test funcion 
keyMap[keyNote].keypress.down; 

或任何你的示例代碼力求做到: )

+1

字典比開關更優雅(當然,它比一堆ifs更優雅)。我不確定它會更快(儘管我也懷疑這會是一個真正的瓶頸)。首先,編譯器在使用開關時會建立一個非常緊湊的跳轉表;我敢打賭,這比動作詞典更快(但是,正如我所說的,差異應該是幾乎不可見的)。 – 2010-10-28 15:55:04

0

好吧,如果你問一些面向對象的專家,最好的辦法是避免像鼠疫這樣的條件。 http://www.as3dp.com/2007/12/21/lets-get-rid-of-conditionals/

這個想法是,每個條件是在一個單獨的類,覆蓋/擴大將做切換的功能。

雖然我個人並沒有在我的代碼中使用條件,但我仍嘗試在條件中使用這種方法。而且你真的可以用這種方式替換所有(幾乎)條件,有時這種好處並不會超過進入它的工作,特別是如果你知道你不會擴展代碼。

相關問題