第9讲键盘输入.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9讲键盘输入

第9讲 交互性是游戏的基本特征,玩家必须与计算机不断的交互得到反应,这才是完整的游戏体验。当进行格斗游戏或RPG等游戏时,如何快速而方便地获取玩家从键盘输入的命令?如何知道用户鼠标移动的情况或游戏杆的输入? win32api获取输入的信息方式是为消息机制,并非为了游戏设计,效率低。在win32模式下,键盘主要用于文字输入,键盘接口完成了重复按键,虚拟键码转换成ASCII字符操作,但游戏并不需要这些多余的转换。键盘响应消息模式并非最快的方式,当连续完成多个操作,消息队列满的时候,渲染过程将会被堵塞,操作得到的反应会延迟。 d3d中,DirectInput提供了一系列的接口,这些接口并不依赖消息机制,而是直接与硬件驱动程序通信,获取输入信息。而且DirectInput提供了在后头访问设备的能力,能够支持所有的输入设备。其最主要的接口是IDirectInput8接口,它用于初始化系统以及创建输入设备接口,而其他所有接口都通过这个接口进行查询,查询是否支持本输入设备和本输入设备提供的功能。 设备:代表了硬件,能够从这些硬件读取输入信息。在directX9.0中使用的输入设备接口名为DirectInputDevice8,该接口用于表示各种输入设备(键盘,鼠标),并提供了相同的访问和控制方法,对于某些输入设备(如游戏杆和鼠标),都能够通过查询各自的IDirectInputDevice8接口对象,以得到另外一个接口IDirectInputEffect。而IDirectInputEffect接口则可以用于控制设备的力反馈效果(力反馈是指把动力和阻力应用到输入设备的轴上,力反馈的单个实例称为效果,效果可由虚拟世界中的事件或状况触发,也可以由输入设备本身触发(如按下按钮等))。 IDirectInput8接口、DirectInputDevice8接口、IDirectInputEffect接口关系: DirectInput的生命周期: DirectInput使用步骤: 1、头文件和库文件的包含 我们首先需要注意的是,在使用DirectInput时,需要保证我们包含了DInput.h头文件,并且在项目中已经链接了DInput8.lib库文件。 当然,库文件我们也可以动态添加: #pragma?comment(lib,?dinput8.lib)?? 2.创建DirectInput接口和设备 一个IDirectInput8对象就代表了主要的DirectInput对象,因此需要创建IDirectInput8接口对象。DirectInput提供了DirectInput8Create函数创建并初始化IDirectInput8接口。该函数的声明如下: HRESULT DirectInput8Create( HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID * ppvOut, LPUNKNOWN punkOuter ); 第一个参数,HINSTANCE类型的hinst,表示我们当前创建的DirectInput的Windows程序句柄,这个值填我们在WinMain函数的参数中的实例句柄就可以了。 第二个参数,DWORD类型的dwVersion,表示我们当前使用的DirectInput版本号,通常可以取DIRECTINPUT_VERSION或者DIRECTINPUT_HEADER_VERSION,这两个值对应的是同一个值,为0x0800。所以我们在这里还可以直接填0x0800 第三个参数,REFIID类型的riidltf,表示接口的标志,通常取IID_IDirectInput8就可以了。 第四个参数,LPVOID 类型的* ppvOut,用于返回我们新创建的IDirectInput8接口对象指针。 第五个参数,LPUNKNOWN类型的punkOuter,一个和COM对象接口相关的参数,通常我们设为NULL就可以了。 这个函数执行成功的话TINPUTVER会返回HRESULT类型的DI_OK。 LPDIRECTINPUT8?????????g_pDirectInput??????=?NULL; if(FAILED(DirectInput8Create(hInstance,0x0800,?IID_IDirectInput8,(void**)g_pDirectInput,?NULL)))? ?return?E_FAIL; 这步完成之后,我们的定义的DIRECTINPUT8接口对象g_pDirectInput就有了控制权利。在IDirectInput8接口中包含了很多用于初始化输入设备及获得设备接口的方法。其中,常用的

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档