采集操纵杆数据

您所在的位置:网站首页 微软模拟飞行控制杆按键 采集操纵杆数据

采集操纵杆数据

2024-07-16 11:33| 来源: 网络整理| 查看: 265

文章目录 一、需求概述二、需求思考三、JoyStick游戏杆编程方法1. 基于底层操作直接操作游戏手柄2. 使用Windows下的API3. 使用Directlnput或者XInput技术4. 使用joystick接口库 四、总结

最近由于项目需要采集游戏杆的二维运动数据。

一、需求概述

采集模拟飞机器中驾驶杆、油门和脚蹬的数据异机驱动X-plane(模拟飞行软件)。

二、需求思考

经查阅资料知道操纵杆、油门和脚蹬都属于输入设备,而飞行模拟类游戏使用飞行杆,绝大多数是直接采用飞机飞行控制杆作为原型去设计的,可以说具有很强的仿真度,游戏摇杆利用前后左右拨动直接影响着飞行游戏中的飞行状态。

什么是游戏杆? 游戏杆属于输入设备(Input Device)是人或外部计算机进行交互的一种装备,用于把原始数据和处理这些数据的程序输入到计算机中。键盘,鼠标,摄像头,扫描仪,光笔,手写输入板,游戏杆,语音输入装置等都属于输入设备。

对需求分解:

采集模拟飞行器中驾驶杆、油门和脚蹬的数据。使用到的技术点是游戏杆编程驱动X-plane的过程中采用开源的xplaneconnect库

X-Plane Connect(XPC)工具箱是一个开源研究工具,用于与商业飞行模拟器软件X-Plane进行交互。 XPC允许用户使用C,C ++,Java,MATLAB或Python编写的功能通过网络实时控制飞机并从X-Plane模拟飞机接收状态信息。 该研究工具已用于可视化飞行路径,测试控制算法,模拟有效空域或生成用于内部飞行模拟软件的窗外视觉效果。 可能的应用包括对XPlane仿真的主动控制,飞行可视化,在飞行过程中记录状态或通过UDP与任务交互。

三、JoyStick游戏杆编程方法

获取游戏杆输入的方式有4种:

1. 基于底层操作直接操作游戏手柄

通过底层开发接口DDK或者读取USB设备直接访问。这样的操作比较复杂,但也未必能够达到所需要的结果。直接放弃

2. 使用Windows下的API

这种方式是直接使用VS来读取JoyStick的C++代码程序,而游戏手柄相关的函数都封装在 Winmm.dll 中。相应的头文件是 Mmsystem.h, 链接时需要链接 Winmm.lib。这里大家可以直接访问官网或者访问https://blog.csdn.net/qq_17525633/category_9865804.html 这里已经总结好了。

缺点:使用Winmm.lib中的Multimedia Joystick Functions有一些弊端,就是Multimedia Joystick Functions只能获取1,2,3,4四个按钮的按键的消息,不能获取8个POV方向键的消息。如果不获取按键的状态使用它就很方便了。

在 windows 系统中,是通过一个系统服务来实时监控游戏手柄的状态的。这个系统服务最多可以同时监控两个游戏手柄,每个游戏手柄最多可以有四个控制键。我们在程序中既可以直接读取游戏手柄的位置信息和按键状态,也可以通过监控相应的系统消息的方式来获得游戏手柄的信息。

3. 使用Directlnput或者XInput技术

DirectInput是微软提供的一个输入设备的API,用于结合键盘、鼠标、摇杆,或其它的游戏控制器。如果是想要在Windows平台下使用摇杆的,可以参考Directlnput和XInput这两篇文章。 如果是游戏开发,可能对操纵杆或者输入设备的操作比较复杂,而且对兼容性要求较高,而DirectInput和XInput提供的接口比较全面,而且和direct X的技术结合紧密。所以这个技术应该是开发Windows平台游戏的不二选择了。

4. 使用joystick接口库

libenjoy。这是一个简单的JoyStick操作接口库,使用C语言实现,可以与C++应用程序一起使用。

SDL-mirror/SDL。这个是一个全面的跨平台媒体/游戏开发库。

四、总结

对游戏杆编程有了新的认识,并介绍了几种读取JoyStick游戏杆输入的方式。 个人比较喜欢joystick接口库,使用造好的轮子很方便。但是Windows平台微软提供的库也很方便。

推荐学习文章:

游戏手柄(JoyStick)编程学习笔记(1)游戏手柄(JoyStick)编程学习笔记(2)


【本文地址】


今日新闻


推荐新闻


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