C++游戏手柄编程

您所在的位置:网站首页 xbox手柄的按键名称 C++游戏手柄编程

C++游戏手柄编程

2023-08-12 00:27| 来源: 网络整理| 查看: 265

我用的是北通宙斯游戏手柄-白金

放几篇非常不错的文章

1.JoyStick游戏杆编程实践_32768的博客-CSDN博客_joystick

2.游戏手柄(JoyStick)编程学习笔记(1)_liyuanbhu的博客-CSDN博客

#include #include #include #include //添加joystick操作api的支持库 #include #pragma comment(lib, "Winmm.lib") int main(int argc, char* argv[]) { JOYINFO joyinfo;//定义joystick信息结构体 JOYINFOEX joyinfoex; joyinfoex.dwSize = sizeof(JOYINFOEX); joyinfoex.dwFlags = JOY_RETURNALL; while(1) { //读取手柄信息 UINT joyNums; joyNums = joyGetNumDevs(); // printf("当前手柄数量:%d \n",joyNums); if (joyNums>=1) { MMRESULT joyreturn = joyGetPosEx(JOYSTICKID1, &joyinfoex); if(joyreturn == JOYERR_NOERROR) { printf("0x%09d ", joyinfoex.dwXpos); printf("0x%09d ", joyinfoex.dwYpos); //printf("0x%09X ", joyinfoex.dwZpos); //printf("0x%09X ", joyinfoex.dwPOV); //printf("0x%09X ", joyinfoex.dwButtons); printf("\n"); }else { switch(joyreturn) { case JOYERR_PARMS : printf("bad parameters\n"); break; case JOYERR_NOCANDO : printf("request not completed\n"); break; case JOYERR_UNPLUGGED : printf("joystick is unplugged\n"); break; default: printf("未知错误\n"); break; } } } if(kbhit()) break; Sleep(300); } return 0; }

第一步:需要包含外部库,我用的QT开发,需要在.pro文件中添加

LIBS += -lWinmm

 包含以下的头文件

#include #include #include

第二步:查询游戏手柄按键信息

1.方向键(前、后、左、右)

方向键 按键访问方式键值前joyinfoex.dwPOVJOY_POVFORWARD后joyinfoex.dwPOVJOY_POVBACKWARD左joyinfoex.dwPOVJOY_POVLEFT右joyinfoex.dwPOVJOY_POVRIGHT默认状态joyinfoex.dwPOVJOY_POVCENTERED

默认没有按键的时候发送 JOY_POVCENTERED 信号  

//方向键 if (joyinfoex.dwPOV == JOY_POVFORWARD)//前 { printf("前"); } if (joyinfoex.dwPOV == JOY_POVCENTERED)//默认没有按键时发送此信号 { printf("宫保鸡丁"); } if (joyinfoex.dwPOV == JOY_POVRIGHT)//右 { printf("右"); } if (joyinfoex.dwPOV == JOY_POVBACKWARD )//后 { printf("后"); } if (joyinfoex.dwPOV == JOY_POVLEFT)//左 { printf("左"); }

 2.获取32个按键按下,可以进行组合。

按键访问方式键值32个组合按键joyinfoex.dwButtons通过函数测

3.获取摇杆、LT\RT信息

(1)、左摇杆,通过xy的坐标来读取,原点是32767

 (2)、右摇杆通过ur的坐标来读取,原点是32767

按键访问方式键值左摇杆x坐标:joyinfoex.dwXpos0-65535y坐标:joyinfoex.dwYpos0-65535右摇杆u坐标:joyinfoex.dwUpos0-65535r坐标:joyinfoex.dwRpos0-65535LT\RT

joyinfoex.dwZpos

没有按键按下:

RT按下:

LT按下:

32767

32767 - 128

32767 - 65408

if (joyinfoex.dwXpos32767) { printf("宫保鸡丁"); } printf("%d", joyinfoex.dwXpos); printf("%d", joyinfoex.dwYpos); printf("%d", joyinfoex.dwZpos); if (joyinfoex.dwZpos == 128) { printf("宫保鸡丁"); } printf("%d", joyinfoex.dwUpos); printf("%d", joyinfoex.dwRpos);

这样就可以读取手柄上的按键信息,进行判断。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3