C++游戏手柄编程-基于windowsAPI-JOYSTICKID
我用的是北通宙斯游戏手柄-白金
放几篇非常不错的文章
1.JoyStick游戏杆编程实践_32768的博客-CSDN博客_joystick
2.游戏手柄(JoyStick)编程学习笔记(1)_liyuanbhu的博客-CSDN博客
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>#include<Windows.h>//添加joystick操作api的支持库
#include<MMSystem.h>
#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 <Windows.h>
#include <WinUser.h>
#include <MMsystem.h>
第二步:查询游戏手柄按键信息
1.方向键(前、后、左、右)
按键 | 访问方式 | 键值 |
前 | joyinfoex.dwPOV | JOY_POVFORWARD |
后 | joyinfoex.dwPOV | JOY_POVBACKWARD |
左 | joyinfoex.dwPOV | JOY_POVLEFT |
右 | joyinfoex.dwPOV | JOY_POVRIGHT |
默认状态 | joyinfoex.dwPOV | JOY_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.dwXpos | 0-65535 |
y坐标:joyinfoex.dwYpos | 0-65535 | |
右摇杆 | u坐标:joyinfoex.dwUpos | 0-65535 |
r坐标:joyinfoex.dwRpos | 0-65535 | |
LT\RT |
joyinfoex.dwZpos 没有按键按下: RT按下: LT按下: |
32767 32767 - 128 32767 - 65408 |
if (joyinfoex.dwXpos<32767 && joyinfoex.dwYpos>32767)
{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);
这样就可以读取手柄上的按键信息,进行判断。
C++游戏手柄编程-基于windowsAPI-JOYSTICKID相关推荐
- matlab与vc混合编程指导书.doc,vc与matlab混合编程—基于com.doc
vc与matlab混合编程-基于com.doc VC与MATLAB混合编程基于COM2010年03月21日星期日1118注意旨在提供一份VC调用MATLAB的快速试验参考和一些实际经验,不保证所有内容 ...
- r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总
我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...
- Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件
Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...
- 网络编程——基于TCP协议的通讯录【课程设计】
网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...
- ARM架构与编程--基于STM32F103 (1)LED原理图
ARM架构与编程–基于STM32F103 (1)LED原理图 前言 学习笔记<硬件知识_LED原理图> 一.点亮一个led的步骤 当我们学习C语言的时候,我们会写个Hello程序.那当我们 ...
- 金融计算与编程 基于matlab,金融计算与编程.pdf
金融市场与风险管理系列教材 金融计算与编程 ---基于 MATLAB 的应用 曹志广 著 上海财经大学出版社 ( ) 图书在版编目 CIP数据 : / : 金融计算与编程 基于 的应用 曹志广著 上海 ...
- 翻页时钟java代码_Android编程基于自定义控件实现时钟功能的方法
本文实例讲述了Android编程基于自定义控件实现时钟功能的方法.分享给大家供大家参考,具体如下: 在学习安卓群英传自定义控件章节的时候,有一个例子是绘制时钟,在实现了书上的例子后就想看这个时钟能不能 ...
- android重力传感器横竖反,Android编程基于重力传感器实现横竖屏放向切换功能
本文实例讲述了Android编程基于重力传感器实现横竖屏放向切换功能.分享给大家供大家参考,具体如下: 最近项目中用到了vr视频播放,因为自己实现,同时要实现横竖屏自动切换屏幕,核心代码如下: pac ...
- 结队编程-基于gui的四则运算生成器
成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...
最新文章
- osgearth+vs2010安装
- Minimum Cost-最小费用最大流
- Android中的Notification
- 如何在CRM WebClient UI里使用HANA Live Report
- c++ 写x64汇编 5参数_怀念9年前用纯C和汇编写的入侵检测软件
- to_number用法示例_Number()函数以及JavaScript中的示例
- android 权重的使用
- html中隐藏内容蜘蛛会抓取吗,蜘蛛会抓取识别JS、CSS、JSON,对SEO有什么影响
- C++读写文件总结 .
- mysql 事务处理null_如何使用Mysql正确的处理财务数据
- 再硬写一个最简单的HTTPSERVER
- 宽带路由器-mac地址克隆
- mysql存储过程返回结果集_原来MySQL的存储过程也可以这么玩?
- 用友打印问题合集 二【各模块】
- android无线投屏到win,无线投影仪怎么连接,看过教程,原来操作这么简单!
- word忘记密码怎么解除
- VTK系列教程九:VR图像裁剪
- 接入新浪微博第三方登录
- 【B站SXT的Java课程中的错误】054 嵌套循环_循环相关练习
- 监听audio是否加载完毕