天天看點

采集操縱杆資料

文章目錄

        • 一、需求概述
        • 二、需求思考
        • 三、JoyStick遊戲杆程式設計方法
          • 1. 基于底層操作直接操作遊戲搖桿
          • 2. 使用Windows下的API
          • 3. 使用Directlnput或者XInput技術
          • 4. 使用joystick接口庫
        • 四、總結
最近由于項目需要采集遊戲杆的二維運動資料。

一、需求概述

采集模拟飛機器中駕駛杆、油門和腳蹬的資料異機驅動

X-plane

(模拟飛行軟體)。

二、需求思考

經查閱資料知道操縱杆、油門和腳蹬都屬于輸入裝置,而飛行模拟類遊戲使用飛行杆,絕大多數是直接采用飛機飛行控制杆作為原型去設計的,可以說具有很強的仿真度,遊戲搖杆利用前後左右撥動直接影響着飛行遊戲中的飛行狀态。

什麼是遊戲杆?

遊戲杆屬于輸入裝置

(Input Device)

是人或外部計算機進行互動的一種裝備,用于把原始資料和處理這些資料的程式輸入到計算機中。鍵盤,滑鼠,攝像頭,掃描器,光筆,手寫輸入闆,遊戲杆,語音輸入裝置等都屬于輸入裝置。

對需求分解:

  1. 采集模拟飛行器中駕駛杆、油門和腳蹬的資料。使用到的技術點是遊戲杆程式設計
  2. 驅動

    X-plane

    的過程中采用開源的xplaneconnect庫

三、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。這是一個簡單的

    JoyStick

    操作接口庫,使用C語言實作,可以與C++應用程式一起使用。
  • SDL-mirror/SDL。這個是一個全面的跨平台媒體/遊戲開發庫。

四、總結

對遊戲杆程式設計有了新的認識,并介紹了幾種讀取

JoyStick

遊戲杆輸入的方式。

個人比較喜歡

joystick

接口庫,使用造好的輪子很友善。但是``Windows`平台微軟提供的庫也很友善。

推薦學習文章:

  • 遊戲搖桿(JoyStick)程式設計學習筆記(1)
  • 遊戲搖桿(JoyStick)程式設計學習筆記(2)