文章目錄
-
-
-
- 一、需求概述
- 二、需求思考
- 三、JoyStick遊戲杆程式設計方法
-
- 1. 基于底層操作直接操作遊戲搖桿
- 2. 使用Windows下的API
- 3. 使用Directlnput或者XInput技術
- 4. 使用joystick接口庫
- 四、總結
-
-
最近由于項目需要采集遊戲杆的二維運動資料。
一、需求概述
采集模拟飛機器中駕駛杆、油門和腳蹬的資料異機驅動
X-plane
(模拟飛行軟體)。
二、需求思考
經查閱資料知道操縱杆、油門和腳蹬都屬于輸入裝置,而飛行模拟類遊戲使用飛行杆,絕大多數是直接采用飛機飛行控制杆作為原型去設計的,可以說具有很強的仿真度,遊戲搖杆利用前後左右撥動直接影響着飛行遊戲中的飛行狀态。
什麼是遊戲杆?
遊戲杆屬于輸入裝置
是人或外部計算機進行互動的一種裝備,用于把原始資料和處理這些資料的程式輸入到計算機中。鍵盤,滑鼠,攝像頭,掃描器,光筆,手寫輸入闆,遊戲杆,語音輸入裝置等都屬于輸入裝置。
(Input Device)
對需求分解:
- 采集模拟飛行器中駕駛杆、油門和腳蹬的資料。使用到的技術點是遊戲杆程式設計
- 驅動
的過程中采用開源的xplaneconnect庫X-plane
三、JoyStick遊戲杆程式設計方法
擷取遊戲杆輸入的方式有
4
種:
1. 基于底層操作直接操作遊戲搖桿
通過底層開發接口
DDK
或者讀取
USB
裝置直接通路。這樣的操作比較複雜,但也未必能夠達到所需要的結果。直接放棄
2. 使用Windows下的API
這種方式是直接使用
VS
來讀取
JoyStick
的C++代碼程式,而遊戲搖桿相關的函數都封裝在 Winmm.dll 中。相應的頭檔案是 Mmsystem.h, 連結時需要連結 Winmm.lib。這裡大家可以直接通路官網或者通路https://blog.csdn.net/qq_17525633/category_9865804.html 這裡已經總結好了。
缺點:使用
Winmm.lib
中的
Multimedia Joystick Functions
有一些弊端,就是
Multimedia Joystick Functions
隻能擷取
1,2,3,4
四個按鈕的按鍵的消息,不能擷取
8
個
POV
方向鍵的消息。如果不擷取按鍵的狀态使用它就很友善了。
在 windows 系統中,是通過一個系統服務來實時監控遊戲搖桿的狀态的。這個系統服務最多可以同時監控兩個遊戲搖桿,每個遊戲搖桿最多可以有四個控制鍵。我們在程式中既可以直接讀取遊戲搖桿的位置資訊和按鍵狀态,也可以通過監控相應的系統消息的方式來獲得遊戲搖桿的資訊。
3. 使用Directlnput或者XInput技術
DirectInput
是微軟提供的一個輸入裝置的
API
,用于結合鍵盤、滑鼠、搖杆,或其它的遊戲控制器。如果是想要在Windows平台下使用搖杆的,可以參考Directlnput和XInput這兩篇文章。
如果是遊戲開發,可能對操縱杆或者輸入裝置的操作比較複雜,而且對相容性要求較高,而
DirectInput
和
XInput
提供的接口比較全面,而且和
direct X
的技術結合緊密。是以這個技術應該是開發
Windows
平台遊戲的不二選擇了。
4. 使用joystick接口庫
- libenjoy。這是一個簡單的
操作接口庫,使用C語言實作,可以與C++應用程式一起使用。JoyStick
- SDL-mirror/SDL。這個是一個全面的跨平台媒體/遊戲開發庫。
四、總結
對遊戲杆程式設計有了新的認識,并介紹了幾種讀取
JoyStick
遊戲杆輸入的方式。
個人比較喜歡
joystick
接口庫,使用造好的輪子很友善。但是``Windows`平台微軟提供的庫也很友善。
推薦學習文章:
- 遊戲搖桿(JoyStick)程式設計學習筆記(1)
- 遊戲搖桿(JoyStick)程式設計學習筆記(2)