C#對游戲手柄的編程開發-API篇(2)
回顧“被動方式”開發
在C#對游戲手柄的編程開發-API篇(1)這篇文章中我們介紹了“被動方式”的開發。在此方式下,我們的程序只扮演一個消息接收者。系統會定時告訴我們某個游戲手柄當前的狀態,我們的程序接收到后再按實際需要進行處理即可。但如果你是一個細心的人,你會發現如果直接按消息事件處理的話會存在一個問題,如我們按下某個鍵(比如向上的方向鍵)然后放開時,對于我們“人”來說,我們按下與彈起的這兩個動作應該只是說明我們只點擊這個按鈕一次。但對于系統來說,它只是機械地定時通知我們的程序在某個時間內游戲手柄的各個按鈕的狀態,而在我們按下到彈起這段時間內,系統有可能已經傳遞了N次的消息通知(N值根據捕捉時設置的uPeriod值與你的按鍵速度來決定),通知手柄有按鈕處于被按下狀態,而如果我們就根據消息包直接處理點擊事件的話,就會導致問題出現(比如在某個游戲中,我們設計的是當點擊一次手柄的右鍵,就將角色向前移動一步。但從我們按下按鈕到彈開此按鈕這段時間,由于人的反應速度遠遠慢于電腦的處理速度,所以這段很短的時間內,系統可能已通知了10次以上的消息包表明游戲手柄右鍵已被按下,這就導致我們按一次右鍵,游戲中的角色卻有可能已移動了十步之多,這可不是我們想要的結果)。那我們要怎樣處理這個“點擊”事件才可以避免重復通知呢?這就是本篇最后要重點講解的內容了……