難處理 多按鍵“同時響應” 總結


 
情景引入

 

 

一.  處理對象八個方向的移動(左上,右下,等)
二.  功能按鍵加組合鍵(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程序中常見按鍵處理問題!最終只有 情景四 無好的結果,不知道有人是否知道如何處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM