前段時間花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方法,向系統申請對某個游戲手柄的捕捉,如果成功申請,系統將會定時將此游戲 手柄的狀態信息通過消息方式通知到我們的某個窗口上。