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

來源:互聯網
上載者:User
 
情景引入

 

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.