DirectInput是一套输入设备的API,其中包括鼠标、键盘、手柄及其他游戏控制器,如力回馈(输入/输出)设备。
本节对DirectInput的功能作了简要说明,并简要介绍如何创建一个DirectInput应用程序。主要包含以下内容:
- DirectInput的能力
- 从DirectInput开始
要全面理解DirectInput是如何工作的,请参照“理解DirectInput”。
要逐步学习使用DirectInput API,请参照以下章节:
使用DirectInput
DirectInput 指南
DirectInput的能力
除了为那些不被Win32 API所支持的设备提供服务外,DirectInput利用直接访问硬件驱动的方式来获取输入,这比windows消息的访问方式更快。
即使应用程序处于后台,DirectInput也可以应用程序获取输入设备数据。同样,对任意类型的输入设备都提供完全支持,其中包括力回馈设备。
通过action映射,应用程序不需要知道具体使用的是什么类型的设备就可以获取输入数据。
DirectInput扩充的服务及改良的性能使它成为windows下的游戏、仿真以及实时交互极其有价值的工具。
然而对于使用键盘作文本输入或利用鼠标来导航的应用程序来说,DirectInput不会提供更多优势。更多信息,可参照 “与windows交互”。
从DirectInput开始
这一节是一个关于如何建立和使用DirectInput样例应用程序的概览。
要获取细节和这些步骤的例子,参见“使用DirectInput”和“DirectInput指南”。
备注:要了解DirectInput,需要理解以下术语:
DirectInput对象:DirectInput接口的根对象
设备:键盘、鼠标、手柄、或者其他输入设备。
DirectInputDevice对象:代码表现的键盘、鼠标、手柄、或者其他输入设备。
Device对象:代码表现的键,按钮,触发器等等输入设备对象上的对象,也可以称作设备对象实例。
下面的步骤描述了一个简单的DirectInput实现,主要描述了应用程序如何接管创建设备并从每种设备(按钮,轴等等)生成各种数据等工作。
- 创建DirectInput对象。你可以使用这个对象来枚举设备并且创建DirectInput设备对象。
- 枚举设备。如果你只使用系统鼠标和键盘,那么这步不是很重要。要确定用户系统上的其他设备,就需要用DirectInput枚举出来。每次DirectInput找到了你需要的设备之后,你可以检查这个设备的能力,可以获取一个关于设备的唯一标识,利用这个标识创建一个DirectInput设备对象来表现这个设备。
- 为每个你想使用的设备创建DirectInputDevice对象。这一步需要使用上一步枚举出来的设备唯一标识。而对于系统的鼠标或者键盘,只需使用标准的GUID。
- 建立设备,对于每个设备,首先要设置一个协作的级别,它决定了与其他应用程序或系统共享这个设备的方式。同时也要设置数据格式来鉴别来自信息包的设备对象,例如按钮还是轴。如果你想获取缓冲数据(事件处理优先级高于实时状态的情况),那么也需要设置缓冲大小。至此你已经可以随意获取关于设备的信息了,可以进一步的控制应用程序的行为。你还可以设置一些属性例如手柄轴返回的值的范围。
- 获取设备。此时你通知DirectInput,你已经准备从设备获取数据了。
- 获取数据。在一个规律的时间间隔里,典型是在每次消息循环或者渲染循环时,既可以获取每个设备的即时状态也可以获取发生在上一次取回的事件记录。如果你愿意,还可以让DirectInput在事件发生时通知你。
- 对数据做出响应。应用程序可以对按钮和轴的状态或者事件(如一个键被按下或者松开)做出响应。
- 关闭DirectInput。在退出之前,应用程序应该归还所有的设备并且释放他们,然后释放DirectInput对象。
这并不是实现DirectInput的唯一途径。要想利用林林总总的已有的和未来的输入设备的优点,并且简单化用户的配置,你可以使用action映射(Action Mapping)。
要为一个设备设置action映射,你需要让DirectInput决定为每个应用程序行为使用何种设备对象。例如,一个赛车游戏中通常要指定一个速度控制器,通常用游戏控制器的y轴。利用action映射,你可以创建一个叫做AXIS_THROTTLE的action,然后让DirectInput指派这个action设备到适合的轴上去。当获取事件时,你利用关联的action来定位他们,这比利用设备对象直接生成他们更好。
更详细的信息,参见Action Mapping.
2005年11月9日译, 不得用于商业用途。
outiejun@yeah.net
Introduction to DirectInput - Microsoft DirectX 9.0 SDK Update (October 2005)
posted on 2005-11-09 17:47
outiejun 阅读(1171)
评论(1) 编辑 收藏 引用 所属分类:
DirectX9翻译-DirectInput