DirectInput介绍
Microsoft DirectInput是一个输入设备的应用程序接口(API),其中就包括鼠标、键盘、游戏杆及其他游戏控制器,如力回馈(输入/输出)设备。
本节主要对DirectInput的功能作了简要说明,并简介了如何创建一个DirectInput应用程序。本节主要包含以下内容:
要全面理解DirectInput的工作方式,请参照“理解DirectInput”。
要逐步学习DirectInput API编程的话,可以参照以下章节:
应用DirectInput
DirectInput C/C++ 教程
DirectInput的能力
除了支持Microsoft Win32 API不支持的设备服务外,DirectInput还能以直接访问硬件驱动的方式提供比Microsoft Windows消息更快的访问方式。
即便应用程序处于后台,DirectInput也可以应用程序获取输入设备数据。同样,对任意类型的输入设备都提供完全支持,其中包括力回馈控制器。
通过action映射,应用程序不需要知道具体使用的是什么类型的设备就可以获取输入数据。
DirectInput扩充的服务及改良的性能,对于游戏、模拟以及实时会话来说太棒了。
但对于使用键盘作文本输入或鼠标导航的应用程序来说,DirectInput不会提供更多优势。更多信息,可参照“Windows交互”。
从DirectInput开始
本节将应用DirectInput概述如何建立一个简单程序。
更多详细信息及示例,可参照“应用DirectInput及DirectInput C/C++教程”。
注意: 要了解DirectInput,就必须理解以下术语:
DirectInput对象:总的DirectInput接口
设备:键盘、鼠标、游戏杆及其他设备
DirectInputDevice对象:用来表示一个键盘、鼠标、游戏杆或其他输入设备
设备对象:用来表示DirectInput设备对象上的一个按键、按钮、触发器等等,也被称为设备对象实例。
可以通过以下步骤实现一个DirectInput的简单应用,使得该程序可以接管确定设备对象(按钮、轴(axes)等)数据项的工作:
创建DirectInput对象。使用该对象的方法来列举设备,并创建DirectInput设备对象。
列举设备。如果你只需要使用仅有的鼠标或键盘的话,该步可以跳过。如果需要确定系统中是否还有其他输入设备,就需要使用DirectInput进行列举。当DirectInput找到一个你所设置的条件的设备时,可以让你检查该设备的能力,同样也可以得到一个设备唯一标识,通过标识就可以创建该设备的设备对象。
创建你所要使用的设备的DirectInputDevice对象。这里你需要用到上一步中的标识符。对于系统鼠标或键盘来说,你可以使用一个标准的全局唯一标识(GUID)。
设置设备有关信息。对每一个设备来说,首先需要设置它的协作级别,也就是说该设备以什么样的方式同系统或其他应用程序共享;然后是用来标识数据包中设备对象的数据格式,如按钮或轴(axes);如果需要获取缓冲数据的话——也就是说,宁愿基于事件而不是状态——那么你还需要设置缓冲区大小。另外,在该步骤中,你可以获取设备的信息并因此可以设计应用程序的行为。最后你还可以设置某些属性值,如游戏杆轴的返回值的范围。
获得设备。该步告诉DirectInput设备已经准备好接收数据了。
获取数据。 每隔一定时间后,如一个消息循环或绘制循环后,可以得到每个设备的当前状态或者自从上次检测以来的事件记录。如果需要的话,只要发生事件,DirectInput就可以通知你。
根据数据进行相应操作。应用程序可以响应按钮、轴的状态,或者响应按键按下、释放时产生的事件。
关闭DirectInput。退出前,应用程序应该不再需要所有设备了,记得释放它们,然后再释放DirectInput对象。
以上不是实现DirectInput的唯一途径,为了利用今后各式各样的输入设备,可以向用户提供简单化的配置,而你可以使用操作映射(action mapping)。
要设置一个设备的操作映射,可以让DirectInput确定每个应用程序都使用什么设备对象。如,竞技类的游戏(racing game)中通常用y-轴控制调速,相反,你可以创建一个AXIS_THROTTLE操作,而让DirectInput把该操作委派给设备上最适合的轴上。当接到消息时,你需要通过联合的操作来鉴别它们,而不是设备对象。
更多信息,请参照操作映射。
原文:Introduction to DirectIput,DirectX SDK
© 2004 Microsoft Corporation. All rights reserved.
翻译:Room3rd@hotmail.com, 2004-11-27