前段時間花38元從網上買了一對北通的USB遊戲手柄,這樣周末與晚上的休閑時間就可以玩玩孩兒時的 SFC與街機類比遊戲了。
某日在某個網站上玩一個Flash遊戲時,突然想到,如果也能使用手柄來玩Flash遊戲,那該多爽 。 但可惜的是,目前的Flash都是不支援對遊戲手柄進行編程,這不免是Flash中的一個遺憾。。
雖然Flash中不支援對遊戲手柄進行編程,但我們可以換種方法,做一個輔助程式(外掛? ) ,將手柄中的操作事件轉換為Flash中可接受的鍵盤與滑鼠操作事件,這樣不就可以使用遊戲手柄來玩 Flash遊戲了嗎?!於是,上網查了相關資料,但卻發現只有C++方面的案例,而C#一個也找不,這不打緊 ,自己動手,豐衣足食 。
(註:類似這樣的功能,網路已有現成的軟體,是一個日本人開發的,叫JoyToKey)
對遊戲手柄進行操作,大概有兩種方式:採用系統API或者使用DirectInput操作遊戲手柄裝置。(也 許還有其它方式,但我的知識範圍有限,其它方式就不得而知了)
採用系統API是一種最簡單的方式,因為系統已幫我們封裝好了所有細節,我們只要在程式中定時取得 遊戲手柄裝置的狀態就可以了(輪循)。
操作遊戲手柄(杆)的API有以下幾個:
| 函數名稱 |
函數說明 |
| joyGetNumDevs |
擷取當前系統支援的遊戲裝置數量 |
| joyGetDevCaps |
查詢擷取指定的遊戲杆裝置以確定其效能 |
| joySetCapture |
向系統申請捕獲某個遊戲裝置並定時將該裝置的狀態值通過訊息發送到某 個視窗 |
| joyReleaseCapture |
釋放對某個遊戲裝置的捕獲 |
| joyGetPos |
擷取遊戲裝置的座標位置和按鈕狀態 |
| joyGetPosEx |
擷取遊戲裝置的座標位置和按鈕狀態 |
| joyGetThreshold |
查詢指定的遊戲杆裝置的當前移動閾值 |
| joySetThreshold |
設定指定的遊戲杆裝置的移動閾值 |
其中,根據調用不同的方法又可分為兩種方式。
1)被動方式:
調用joySetCapture方法,向系統申請對某個遊戲手柄的捕捉,如果成功申請,系統將會定時將此遊戲 手柄的狀態資訊通過訊息方式通知到我們的某個視窗上。