2012-11-29 45 views
5

我正在做一個小精靈,其中角色根據按下的鍵(箭頭)移動。我注意到,.KeyDown()方法不斷被調用,直到任何密鑰被釋放。C中的KeyDown()簡單但棘手的問題#

例如當用戶按下向上箭頭時,.KeyDown()的方法不斷被調用。如果向下箭頭被按下,仍然按下向上箭頭,KeyEventArgs現在從下箭頭接收輸入。最後,當向上箭頭被釋放時,.KeyDown()事件停止被稱爲,即使仍然按下向下箭頭。

如何「重置」輸入並告訴編譯器繼續調用.KeyDown()

+0

您是否嘗試過記錄哪個密鑰負責KeyDown,以便您可以檢查何時獲得密鑰發佈?這樣,您可以繼續前進,就好像密鑰仍然關閉,直到您感興趣的密鑰是啓動發佈的密鑰。 – RonaldBarzell

+0

如果您的遊戲邏輯處於實時事件循環中,您可以直接調用它:'Form_KeyDown(null,e)' –

回答

3

一個很好的問題 - 我不認爲有任何方法可以覆蓋這個默認行爲,但通過跟蹤自己的按鍵可以避免這種影響 - 例如,當調用.KeyDown()時,添加對某種類型的結構的關鍵是跟蹤它 - 然後,當調用.KeyUp()時,從該結構中刪除鍵。

然後,只需重複檢查當前按鍵的結構,並根據,而不是.KeyDown()告訴你的運動。

+0

保持跟蹤關鍵字和鍵入是我發現的唯一方法。我有一個255個整數的數組,每個元素對應一個鍵碼。每次循環時,我將它們設置爲0(未按下),1(新按下)或2(仍按下)。我這樣做是因爲您需要連續使用某些功能(如使用光標鍵移動),有些您只關心最初的按鍵(如'M'來切換HUD)。 – kbelder

0

您可以嘗試使用KeyUp以檢測密鑰何時被釋放。然後,您可以假定該鍵仍然被按下,直到調用KeyUp