情景引入 |
一. 處理對象八個方向的移動(左上,右下,等)
二. 功能按鍵加組合鍵(Ctrl + A,等)該處理類似是與情景一
三. 雙人對弈的游戲(如格斗類)
四. 同時響應多按鍵.(如音樂類游戲,同時按下F和J按鍵才算擊中)(注意是同時相應,而不是拿個什么標識來處理那個按下了!那個未按下)
相關解決方案 |
1》 對於處理情景一,網上有比較多的解決方案,主要實現方式為,數組矩陣,也有少量的使用布爾標識來處理
代碼就不貼了:博客園的 作者 nowpaper 就已經寫了 Silverlight C# 游戲開發:方向鍵的組合,八方向實現
http://www.cnblogs.com/nowpaper/archive/2010/03/09/1680172.html
2》 對於第二種功能組合,大部分是標識處理,或者 執行相應的 異域 運算,前提是 該枚舉 支持 Flag
舉個例子:Winform的,但是大部分處理都類似
C# winform的窗體類有KeyPreview屬性,可以接收窗體內控件的鍵盤事件注冊。
窗體和控件都有KeyDown,KeyUp,KeyPress三個事件,每個事件都會有KeyEventArgs參數傳入,只要判斷傳入參數的KeyChar就可以了,Framework提供了Keys枚舉來表示鍵盤上的各個鍵。
核心判斷的代碼如下:
1.單鍵判斷
if (e.KeyCode == Keys.Delete)
{
//處理邏輯
}
2.組合建判斷:
if (e.Modifiers.CompareTo(Keys.Control) == 0 && e.KeyCode == Keys.Delete)
{
//處理邏輯
}
3》 這個需要建立2個邏輯區域,后面的實現基本和情景一相同
4》 慚愧!啊!暫時沒有找到任何的解決方案!基本不能在同一時刻處理多按鍵響應
我想了很久,自己覺得一般的解決方案大概就2種:(可能是自己操作系統知識了解太少的緣故)
1.用第三個按鍵,取代雙按鍵響應問題,但是這樣會帶來較差的按鍵體驗。
2.使用按鍵線程池,在某一個時刻,把有效的按鍵放入這個池中,(當然這個要多線程)
然后延遲大概100毫秒,取出當前所以已經按下的按鍵,這樣就可以組合了。但是這100毫秒
的延遲是個問題,有時候100毫秒就來不及按下2個按鍵。
該隨筆意在總結C/S程序中常見按鍵處理問題!最終只有 情景四 無好的結果,不知道有人是否知道如何處理