目前市面上的游戏外设,要么支持传统的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(, &m_ControllerState) != ERROR_SUCCESS)
{
MessageBox(_T("No Controller Connected!"));
}

在一个定时器或者线程里面,可以通过判定XINPUT_STATE相关成员的值来识别相关按键是否被按下,代码如下:

XINPUT_GAMEPAD gamepad;
CString temp;
while(XInputGetState(, &(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针对游戏外设的编程关键点已经水落石出。

如何通过XInput技术针对游戏方向盘或者手柄编程的更多相关文章

  1. 如何通过DirectInput技术针对莱仕达雷驰V3II游戏方向盘编程

    三自由度的动感座椅可以让玩游戏人员在玩的过程中随座椅一起晃动,通过应用程序对方向盘动作的抓取来实现体感,动作类型主要分为加速(后仰,对应踩油门).减速(前倾,对应踩刹车 ).左转(向左打方向盘).右转 ...

  2. 原创教程“ActionScript3.0游戏中的图像编程”開始连载啦!

            经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方 ...

  3. 动态弹球的实现 加入了多线程技术--javaSE游戏准备工作

    任务描述:实现了动态弹球的功能,对于有弹球功能的SE游戏奠定了基础. package 运用线程技术的小球; import java.awt.*; import java.awt.event.*; im ...

  4. 锐动SDK针对游戏直播提出的解决方案

    方案架构 PC端视频直播与录播功能为游戏厂商宣传,玩家个人秀,大型电竞赛事提供完美的技术解决方案. 直播形式灵活多变不,同音源的选择,画面切换,游戏中嵌入摄像头丰,富解说画面.突出主播个人魅力与粉丝形 ...

  5. UnrealEngine4针对游戏模式的思考

    游戏能够概括为三类:单进程联机(超级玛丽).小规模联机(魔兽争霸.CS),大规模联机(魔兽世界). watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmx1c ...

  6. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  7. 3D游戏引擎一 win32编程

    Windows程序一般都等待用户进行一些操作,然后响应并採取行动. 一般来说.对win32的程序的操作都会转换为系统事件队列中的消息,如按键消息WM_KEYDOWN,WM_MOUSECLICK等传递键 ...

  8. Mad Libs游戏:熟悉python编程环境,基本输入输出

    Mad Libs游戏: 代码: name1=input("请输入一个名字:") name2=input("请输入一个名字:") print("{}才刚 ...

  9. bananapi+OLED做的一个打地鼠游戏,c语言编程

    说明一下:BPI是对拍死的BPI的计数,对应最终的成绩RANK是难度 数值越低难度越高 每当打死10个BPI以后就会减一即难度高一级 默认初始化RANK等于15 DIE是存在的BPI数量,一旦数量大于 ...

随机推荐

  1. CMU Database Systems - Two-phase Locking

    首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本 ...

  2. UVA - 1623 Enter The Dragon(贪心)

    题目: 思路: 读完题之后有了以下想法: 当遇到下雨的天,就找这个湖泊上一次下雨满了之后又一次不下雨的日期.有就在这个日期下记录被神龙喝干的湖的编号,没有就是不符合题意. 这个想法是对的,但是却被代码 ...

  3. C++关键字:explicit

    #include "pch.h" #include <iostream> using namespace std; class BaseClass { public: ...

  4. saturne installation on Ubuntu

    test installation Table of Contents 1. installation guide 1 installation guide saturne_installation. ...

  5. Codeforces Educational Codeforces Round 17 Problem.A kth-divisor (暴力+stl)

    You are given two integers n and k. Find k-th smallest divisor of n, or report that it doesn't exist ...

  6. Python基础(四) 基础拾遗、数据类型进阶

    一.基础拾遗 (一).变量作用域 外层变量,可以被内层变量直接调用:内层变量,无法被外层变量使用.这种说法在其它语言中适用,在python中除了栈以外,正常的变量作用域,只要执行声明并在内存中存在,该 ...

  7. Delphi语法

    类与对象 从用户角度考虑,用户并不需要了解面向对象编程的知识,就可编写Delphi应用程序.当用户在建立新窗体.添加新组件以及处理事件时,大部分相关代码会由Delphi自动产生.但是,知道语言及其细节 ...

  8. 【Codeforces 375A】Divisible by Seven

    [链接] 我是链接,点我呀:) [题意] 让你把一个包含数字1,6,8,9的数字重新组合,使得组合成的数字能被7整除 [题解] 我们先提取出来1,6,8,9各1个 然后把剩余的len-4个数字除了0之 ...

  9. Sigmoid Function

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51734189 Sigmodi 函数是一 ...

  10. Minimum Sum LCM(uva 10791)

    题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1 ...