DirectInput介绍

DirectInput介绍


  Microsoft DirectInput是一个输入设备的应用程序接口(API),其中就包括鼠标、键盘、游戏杆及其他游戏控制器,如力回馈(输入/输出)设备。

  本节主要对DirectInput的功能作了简要说明,并简介了如何创建一个DirectInput应用程序。本节主要包含以下内容:

  • 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)等)数据项的工作:

  1. 创建DirectInput对象。使用该对象的方法来列举设备,并创建DirectInput设备对象。
  2. 列举设备。如果你只需要使用仅有的鼠标或键盘的话,该步可以跳过。如果需要确定系统中是否还有其他输入设备,就需要使用DirectInput进行列举。当DirectInput找到一个你所设置的条件的设备时,可以让你检查该设备的能力,同样也可以得到一个设备唯一标识,通过标识就可以创建该设备的设备对象。
  3. 创建你所要使用的设备的DirectInputDevice对象。这里你需要用到上一步中的标识符。对于系统鼠标或键盘来说,你可以使用一个标准的全局唯一标识(GUID)。
  4. 设置设备有关信息。对每一个设备来说,首先需要设置它的协作级别,也就是说该设备以什么样的方式同系统或其他应用程序共享;然后是用来标识数据包中设备对象的数据格式,如按钮或轴(axes);如果需要获取缓冲数据的话——也就是说,宁愿基于事件而不是状态——那么你还需要设置缓冲区大小。另外,在该步骤中,你可以获取设备的信息并因此可以设计应用程序的行为。最后你还可以设置某些属性值,如游戏杆轴的返回值的范围。
  5. 获得设备。该步告诉DirectInput设备已经准备好接收数据了。
  6. 获取数据。 每隔一定时间后,如一个消息循环或绘制循环后,可以得到每个设备的当前状态或者自从上次检测以来的事件记录。如果需要的话,只要发生事件,DirectInput就可以通知你。
  7. 根据数据进行相应操作。应用程序可以响应按钮、轴的状态,或者响应按键按下、释放时产生的事件。
  8. 关闭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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
零资源分下载,分享精神至上~ 4.0版新加入雪花飞扬天气模拟粒子系统,效果非常华丽。 提醒大家一下,可在SnowParticleClass.h中的PARTICLE_NUMBER宏中改变雪花粒子数量,默认粒子数量为10000,我1G显存的显卡取10万粒子数量帧数就只有8帧了。所以要自己改粒子数量的话请根据自己的显卡性能酌情选择,如果你取个非常大的50万粒子数量,显卡吃不消烧了可别怪我- - 其中的3D人物模型来自英雄无敌6。 背景音乐为魔兽暗夜精灵战斗曲主题曲。 一个综合型的Direct3D示例程序的4.0版。 用键盘上W,A,S,D,I,J,K,L,↑,↓,←,→12个键加上鼠标在美丽的三维空间中翱翔。包括了Direct3D初始化,DirectInput输入处理,顶点缓存,光照与材质,文字输出,颜色,纹理贴图,四大变换,网格模型,X文件载入等等知识(当然还有默认被开启的深度缓存),以及地形系统模拟,三维天空模拟,粒子系统。 源码的配套博文是 《【Visual C++】游戏开发五十 浅墨DirectX教程十八 雪花飞扬:实现唯美的粒子系统》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8744805, 点击Release文件夹下的exe文件可以直接看到运行效果,运行需要DirectX运行库的支持。报缺少D3D的DLL系列错误的童鞋们请google/百度一下 “DirectX 9.0c runtime”,下载并装个最新版的。 报缺少MVCR100D.Dll错误的朋友们去下一个安装就可以了,或者直接点击sln打开工程再次编译一次。 如果是想调试并运行源代码,但是报错了,请去下载最新版DirectX SDK并进行DirectX开发环境的配置。 编写环境:VS2010 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 希望能和大家一起交流,共同学习,共同进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值