如何通過XInput技術針對游戲方向盤或者手柄編程


目前市面上的游戲外設,要么支持傳統的DirectInput接口,要么支持最新的XInput技術。今天在這里聊一聊,如何通過XInput技術實現對這類游戲外設相關信息的捕獲。關於DirectInput與XInput間的區別,可以參考 XInput和DirectInput文章。
 
相較於DirectInput來說,XInput在針對游戲外設編程時就簡單明了很多,不需要太多繁瑣的代碼就可以輕松獲得游戲外設的狀態。
 
首先,在應用程序頭文件中添加以下信息,代碼如下:
#include <XInput.h>
#include "afxwin.h"
#pragma comment(lib, "XInput.lib")

在應用程序類當中,定義一個手柄狀態量,代碼如下:

public:
     XINPUT_STATE m_ControllerState;

通過XInputGetState函數來獲取支持XInput接口的游戲外設信息,同時通過該函數的返回值信息來判斷當前是否有支持XInput接口的游戲設備接入當前操作系統。

ZeroMemory(&m_ControllerState, sizeof(XINPUT_STATE));
if(XInputGetState(0, &m_ControllerState) != ERROR_SUCCESS)
{
     MessageBox(_T("No Controller Connected!"));
}

在一個定時器或者線程里面,可以通過判定XINPUT_STATE相關成員的值來識別相關按鍵是否被按下,代碼如下:

XINPUT_GAMEPAD gamepad;
CString temp;
while(XInputGetState(0, &(m_ControllerState)) == ERROR_SUCCESS)
{
     gamepad = m_ControllerState.Gamepad;
     // gamepad.sThumbLX
     // gamepad.sThumbLY
     // gamepad.bLeftTrigger
     // gamepad.bRightTrigger
     // gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP
     // gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN
     // gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT
     // gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT
     // gamepad.wButtons & XINPUT_GAMEPAD_START
     // gamepad.wButtons & XINPUT_GAMEPAD_BACK
     // gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER
     // gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER
     // gamepad.wButtons & XINPUT_GAMEPAD_A
     // gamepad.wButtons & XINPUT_GAMEPAD_B
     // gamepad.wButtons & XINPUT_GAMEPAD_X
     // gamepad.wButtons & XINPUT_GAMEPAD_Y
}
至此,所有XInput針對游戲外設的編程關鍵點已經水落石出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM