掌握DirectX和DirectInput —— 力反馈游戏杆

DirectX简介 第五篇 DirectInput简介 DirectInput简介 1.       DirectInput的得名是因为它直接与设备驱动器通讯,对鼠标和键盘也就意味着立即响应硬件中断,而不是等待Windows发送消息证明已发生输入事件 2.       DirectInput概念 (1)       设备 1.       键盘 2.       鼠标(触摸板、跟踪球以及相应的按键) 3. 阅读详情

掌握DirectX和DirectInput——力反馈游戏杆

Jason Clark

     不知不觉中,Windows下的游戏和多媒体程序已经开始流行。硬件变得越来越快,Windows也变得更加灵活。自从Microsoft发布了DirectX,游戏开发人员对其它平台已经越来越不感兴趣了。许多游戏开发者也已经将他们的开发工作完全移植到了Windows下。

     为PC开发游戏从来就没有轻松过。从无数种显示卡和声卡中,开发者学会了在功能性和兼容性之间平衡的艺术。他们不得不处理象页面切换、段内存结构和位操作这样令人讨厌的问题。并且随着多人游戏的流行,开发者必须同时处理象网络和通信等事项。DirectX引入后,游戏开发者变得轻松了。通过为开发者提供的DirectX对象,绝大多数讨厌的工作已经被简化了。

     基于DirectX的程序是普通的Windows程序吗?必须懂得COM吗?为简单的程序值得使用DirectX吗?必须使用DirectX的全部组件吗?这样的问题肯定还有更多。

     本文将首先介绍DirectX,然后介绍DirectX的一个组件DirectInput的使用。演示程序说明了DirectInput的用法,着重介绍了其强大的反馈功能。

DirectX揭密

     DirectX是一套为Windows程序提供对系统硬件更亲密控制的组件。(表1列出了DirectX 5.0的组件及其作用)。那么,亲密控制是什么意思呢?

表1:DirectX 5.0的组件

组件

用途

DirectDraw

高速2D图象

DirectSound

短响应时间声音输出

Direct3D

高速3D图象

DirectInput

面向游戏的对游戏杆和其它输入设备的访问

DirectSetup

方便的安装DirectX组件

DirectPlay

面向游戏的通信和网络支持

DirectShow

视频流支持

DirectAnimation

动画录放支持

     DirectX提供的硬件控制常常被描述成底层控制,这会使人联想起位操作和其它讨厌的事情。实际上,DirectX组件包含许多高层API,使得象复制位图和播放声音等复杂的工作变得相当简单。用“为程序提供比过去更好的对硬件的控制”来形容DirectX更准确。这在Windows中是一个显著的特性,因为在Windows中,资源是共享的,并由操作系统控制。

     DirectX组件遵守称为COM的二进制对象的工业标准。

开始DirectX

     下面从DirectX的安装开始讲起。大多数情况下,某个好玩的游戏就会为系统安装DirectX。为得到最新的版本,应该从最新的Microsoft Platform SDK中将DirectX安装到系统中。可以在http://www.microsoft.com/msdn站点或者MSDN光盘中找到platform SDK。缺省情况下,Microsoft Platform SDK被安装到缺省驱动器根目录下的/MSSDK目录中。DirectX的头文件安装在/MSSDK/INCLUDE目录中,Lib文件安装在/MSSDK/LIB目录中。

     Platform SDK包含了一些非常好的DirectX例子和文档。早期发布的DirectX文档非常粗略而且有些是错误的,现在的版本已经极大地改正了这一问题。最好要熟悉这些文档。

     现在已经为安装利用DirectX的程序做好了准备。所幸的是,不必一次就处理DirectX的全部功能。DirectX是一套可以分别使用的组件。实际上,在编程概念中,DirectX的不同部分互相没有联系。它们仅仅是具有相同的设计风格和目标:使Windows的游戏编程变得容易。

     使用DirectX组件的程序有什么特殊的地方吗?根本没有。使用DirectX组件的程序是基于Win32的程序,它们使用普通Win32 API集,并且可以访问所有可以获得的操作系统工具。实际上,DirectX既可以用于GUI程序,也可以用于控制台程序。可以直接用Petzold-style SDK编程开发程序,也可以用基本类库,如MFC。总的说,唯一的要求是大多数DirectX组件在程序中需要HWND,所以至少要有一个窗口。

     虽然DirectX组件是分离的,但是每个组件的实现风格和使用都是相同的。DirectInput是学习DirectX的非常好的出发点,原因是DirectInput是最简单的组件之一。

用力

     以后在游戏中要“用力”,这是电影《星球大战》中的说法,因为DirectInput中加入了相当令人陶醉的力反馈支持。DirectX 5.0以前,DirectInput支持从鼠标和键盘读取输入,这是一个有用但却令人厌烦的特性。DirectX 5.0中,DirectInput被扩充到支持具有以物理力的形式向用户传播反馈的能力的设备。

     如果不能立即理解上面的内容,下面就用一个游戏进行解释。假设你刚启动了你最喜欢的超现实3D越野赛车游戏,正手握力反馈游戏杆。在起跑线上,你可以听到赛车引擎的空转声,同时也能够通过游戏杆感觉到赛车引擎的空转!比赛开始后,你可以感觉到引擎高速旋转的嗡嗡震动。当行驶到赛程中崎岖的地段时,你将会不停的感觉到电子碰撞。赛车在整个赛场上撞来撞去,你的游戏杆也会如此。赛车车轮卡在车辙中导致赛车被拉向左边,游戏杆也会被拉向左边!整个过程中你可以感觉到每次颠簸、刮擦、撞击和撞毁。

     现在,带有支持DirectInput的Windows驱动程序的唯一的力反馈设备是Microsoft的SideWinder Force Feedback Pro。这一现状不会持续太久,新设备以及现有设备的新驱动程序很快就会进入市场。

剖析DirectInput

     DirectInput由三个对象组成:DirectInput, DirectInputDevice, 和DirectInputEffect (见表2)。DirectInput是一个高层的对象,通过DirectInput对象可以对相关的输入设备进行基本的初始化和查找。DirectInput对象最终用来创建低层的DirectInputDevice对象。DirectX中的每个主要组件都采用相同的方法,首先创建高层对象,如DirectInput或DirectSound对象,然后创建低层对象与硬件进行实际的通信。

表2: DirectInput对象

对象

说明

DirectInput

封装高层DirectInput功能,列举设备并用来创建DirectInputDevice对象。

DirectInputDevice

与物理输入设备的接口,例如游戏杆,包括收集和设置设备状态信息的接口,并且用来创建DirectInputEffect对象 (对于力反馈设备)。

DirectInputEffect

封装能够在力反馈设备上“播放”的简单效果,提供启动、停止和设置力反馈效果等功能。

     DirectInput对象是三个对象中最容易理解的。实际上,它在一个接口形式IDirectInput (见表3)中只提供五个函数。这是DirectInput的一个非常重要的部分,因为这是出发点。

表3:IdirectInput接口

成员函数

说明

CreateDevice

创建一个DirectInputDevice对象并返回一个指向其IdirectInputDevice接口的指针。

EnumDevices

为找到的与给定标准匹配的每个设备调用一个回调函数,每个回调函数提供一个GUID,可以用在CreateDevice中创建DirectInputDevice对象。

GetDeviceStatus

测试物理设备是否连接到系统。

Initialize

c# DirectX.DirectInput 手柄编程 源代码 立即下载

相关推荐

控制游戏手柄通用程序

通过DirectInput控制游戏手柄通用程序,支持力反馈

VS2019 C# MySQL 学生信息增删改查(一、增删)

VS2019 C# MySQL 学生信息增删改查 由于刚刚学习VS2019,入手的第一个例子是编写一个简单的增删改查。这里,我以学生信息为例,进行详细的过程描述以及代码实现。 一、 新建一个Windows窗体应用程序 1、创建新项目界面,如下图所示。 2、更改项目名称,当然不修改也可以。我这里的是“StudentInfoSystem”;项目存放位置路径根据自己需要进行更改;“将解决方案和项目放在同一目录中”前面的勾选框,选不选都可以;点击“创建”,如下图所示。 二、前期准备工作 1、将Form1属性中

青哥 1万+

从压电传感器到示波器:手把手教你用CA3140搭建电荷放大器(含PCB布局与调零技巧)

本文详细介绍了如何使用CA3140运算放大器搭建专业级电荷放大器,从压电传感器信号特性分析到PCB布局与调零技巧,全程实战演示。重点解析了CA3140的低通滤波器设计、反馈网络参数计算及抗干扰增强方案,帮助电子爱好者高效实现微弱电荷信号的稳定转换与测量。

weixin_31355483的博客 597

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 255

【AFAC2026金融智能-赛题二】2亿像素的面条图,我切了1000刀拼回完美Markdown

摘要: AFAC2026金融智能创新大赛的「复杂金融文档还原挑战」任务是将高分辨率金融文档截图转换为结构化Markdown文本。面对2亿像素的“面条图”和严格的计算限制(禁用主流大模型,仅允许调用FinixDoc-VL API且模型需小于10M),作者提出四层流水线解决方案: 图像预处理:通过文本行投影检测在行间隙处智能切图,避免截断文字; API调度:5路并发轮询请求,结合内容哈希缓存与指数退避重试机制优化调用效率; 后处理:采用最长公共子串匹配去除文本重叠,并设计表格对齐算法修复跨块表格; 结果输出:按

170

YOLOv11与Roboflow数据预处理实战:从原始数据到高性能模型

摘要 Roboflow平台与YOLOv11的结合为计算机视觉开发者提供了高效的工作流。Roboflow提供数据集管理、预处理、增强和导出的一站式解决方案,支持多种标注格式并与YOLOv11无缝集成。YOLOv11在YOLO系列基础上进行了架构创新,包括深度宽度优化、C3k2机制和C2PSA注意力机制,提供从纳米版到超大版的多种模型变体。 使用Roboflow的流程包括:注册工作区、收集/导入数据(支持本地和公开数据集)、专业标注(含SAM辅助)、预处理(尺寸调整、归一化等)和数据增强(几何变换和颜色调整)。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 350

一步一步教你如何安装IP-Guard(客户端WINDOWS篇)

1、安装完服务器后,在服务器右下角有一个IP-GUARD图标:如图 2、点图标右键选注册: 3、注册成功后, 4、在开始菜单里选生成客户端安装包。 5、生成客户端安装包成功,安装名字可以任意,但是最好是英文名字。 6、将客户端安装程序复制到桌面。 7、退出所有杀毒软件、安全卫士、电脑管家等然后运行 8、安装完成后,立即重启计算机。IPguard客户端安装完成。 9、这样在控制里就可以看到已经安装客户端的计算机,在线显示蓝色,灰色表示计算机已经离线货关机 ...

IP-Guard专栏 5625

RPA与旅游与酒店行业自动化实战案例

1. 背景介绍 1.1 旅游与酒店行业的挑战 旅游与酒店行业是一个高度竞争的市场,企业需要不断提高服务质量、降低成本、提高效率以保持竞争力。在这个过程中,企业面临着诸多挑战,如客户需求多样化、市场变化快速、人力资源成本高昂等。为了应对这些挑战,企业需要寻求新的技术手段来提高运营效率。

AI天才研究院 615

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: 写一个DX8的屏幕保护程序-------Alpha 闪烁效果
下一篇: 使用 Microsoft.NET Frameworks 创建Windows应用程序
coolstar
博客等级 码龄26年 214粉丝 164原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值