2014-03-06 87 views
2

我正在學習XNA(v。4.0),我正在使用鍵盤上的箭頭鍵移動精靈,並在空間中製作字符sprint舉行。XNA Keyboard.GetState()不返回按下所有按鍵

下面是我的代碼,以確定被按下哪些鍵:

currentKBState = Keyboard.GetState(); 

bool right = currentKBState.IsKeyDown(Keys.Right); 
bool left = currentKBState.IsKeyDown(Keys.Left); 
bool up = currentKBState.IsKeyDown(Keys.Up); 
bool down = currentKBState.IsKeyDown(Keys.Down); 
bool space = currentKBState.IsKeyDown(Keys.Space); 

System.Diagnostics.Debug.WriteLine(String.Format("{0} {1} {2} {3} {4}", right, left, up, down, space)); 

的問題是,我不能得到所有5個在同一時間按下。有時只有兩個會註冊。例如,如果我保持向上,向下和向左,它只能說上下是真的,不管我持有三個鍵多久。我希望能夠處理,不管按什麼組合。爲什麼它沒有註冊所有正在按下的按鈕?我需要做一個不同的方式嗎?

+0

這可能是由你自己的鍵盤造成的檢查。 – Skami

回答

6

這不是代碼問題。這是鍵盤硬件的限制。

便宜的鍵盤可靠地檢測到兩個併發按鍵,但在三個按鍵的特定組合下可能已經失效。

參見Rollover (key)

現代鍵盤檢測重影,並且代替註冊第四密鑰,它們將忽略所述第三密鑰,這被稱爲干擾。按鍵時卡住哪個按鍵會因品牌和鍵盤型號而異。由於大多數消費者鍵盤使用的鍵盤矩陣,矩陣中方形塊中的四個鍵中的三個鍵被按下時(例如QASW或JKUI),經常會發生干擾和重影。

+0

我發現一個網站說,通過按住shift鍵並鍵入「快速棕色狐狸跳過懶狗」來測試這一點,並且我的鍵盤得到了這個...「HE QUIK BROWN FO JUPS OER HE LA DOG」。所以這似乎是問題所在。謝謝!我一直在試圖調試一個小時。 (將在5分鐘內接受答案) –

+0

快速褐色狐狸跳躍在懶狗上。有趣的是,我的鍵盤處理這個很好,但不會處理塊內的3個鍵。 –

+0

@ Smith.h.Neil正如維基百科所說,矩陣取決於鍵盤的品牌。對於優秀的鍵盤,一次支持任何6個鍵沒有問題。硬件方面,他們經常可以超越這個範圍,但[與PS/2 USB不同,默認情況下僅限於6鍵翻轉](http://winhlp.com/node/659)。 – Loki

0

你可以用

Keys[] currentPressedKeys = currentKeyboardState.GetPressedKeys(); 

,然後循環嘗試過鑰匙,如果一些按

相關問題