如何通过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针对游戏外设的编程关键点已经水落石出。
版权声明:本文为wolfmvp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。