zoukankan      html  css  js  c++  java
  • 如何通过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针对游戏外设的编程关键点已经水落石出。
    作者:常想一二
    出处:http://www.cnblogs.com/wolfmvp/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Zabbix常见问题手册
    Shell脚本常用语句
    ZABBIX定义宏变量
    Zabbix4.0系统配置事件通知
    c++ 八皇后问题(转载)
    (c++)数据结构顺序表编码练习
    JPA的事务注解@Transactional使用总结(转)
    小程序开发流程(java后端)
    连接远程数据库,得到数据插入本地表中
    php复制目录
  • 原文地址:https://www.cnblogs.com/wolfmvp/p/6908585.html
Copyright © 2011-2022 走看看