- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
游戏中输入的处理
谜盘概述:
h m .
当我们按下或者是秣放?个键时,一个信号将被传送给桩席的微处理器,随后键盘微处理 器将向计算机系统“中请?一个中断,同时系统从键盘那里获很了一个字符码,从而使得系统得 知到成是那个键被按卜或者释放,微处理器绐计算机系统传送的那个字符仍被称作扫描仰.下 图让我们有个更为清晰的理解:
这里需要指出的是一个扫描码的大小是一个字节,其中低7位(即bitO-6)LI是128.
Windows中的键盘处理:
想在windowswindows的消息 机制使得对Jwindows把扫描码转换为虚拟码和ASCII码,然后通 过消息机制来告诉程序员某个避被按下『.虚拟码只是将原来的扫描码在 windowsVKA而不是30来表示A.而ASCII码是为了实现扫描码和字符之间的对应关系的, 在ASCI【码里面,A和a所对应的ASCII W是不同的,最多表示128种不同的字符.为了能表 示更多的字符,有时候要用到扩展的 ascii码,所谓扩展就是增添r ?位附加信息,这样就使 得可以表示的字符数LI到达了 256个.但是仍然不能到达要* .这也是Unicode产生的原因之 一.到了 Unicode 个字符用16个比特位来表示,所以总共能表示65535种字符,满足了目前 所有需求.
对于接收到的艰拟码或者ASCII?
windows中鼠标的处理:
敝标相对于堆盘来说就更加简单了 .因为鼠标上的”零件“实在是太少了 .当我们按下一个 键时就给系统发送一个信号,释放时同样要向系统发送信号应标何隔?个很小的时间间隔就 想系统报告它的移动信息等,鼠标的驶动程序读入这些数据然后转换成相应的形犬.然而用传 统的消息机制来处理M标消用是很楔的.有时候不能满足湖戏的需要.因为每个取标消息都要 传送给消息处理过程.然后再被插入到相应的消息队列等待处理,这对于游戏的实时性来说是 很不利的,玩家可不想任自己发出命令后要过一段时间才有反响,要的是速度!
从上面的表述我们发现,传统的windows输入处理都耍先由设备驱动程序处理?然后再交 给系统处理,,靖后才再给相应的应用程序.为什么不绕开系统而让设备驱动程序跟应用程序宜 接交互呢?这就是Dircctlnput的原理.
Dircctlnput 根底:
Direcilnput用一组COM对象来表示输入系统和具体的输入设备.最主要的对象 IDircctlnputR,用来初始化输入系统和创立输入设备耐汝?
Direcilnput COM 对象
lDirectlnput8 建.IDirecllnputDevice8 设备对象.
lDirectlnput8 建.
IDirecllnputDevice8 设备对象.
IDircctlnputEffcct用来实现反响效果的COM
IDircctlnputEffcct
用来实现反响效果的COM对象.
所有的输入设备都使用同一个接曰对象来处理:IDircctlnputDevicc8. 种设备都以此 为暮础再加上各门的特伯.信息.下列图可以布我们理解:
IDiix?ctInput8 创立各种 IDirectInpuiDcvice8? 然后由 IDireccInputDevice8 来创立 IDireclInputEffcct 对汝.
IDi”clInpui8组件对象包含?组函数用来初始化数据系统.获得输入设备接口 .用的最多的是 以下两个函数:
IDinectlnput8::EnumDevices() 和 IDirectInput8::CreateDevice().在以后的学习中我们会详细 的介绍这两个函数?
Direcilnput的初始化:
为了使用Direcilnput,我们首先要在程序文件中包含二并旦连接
对象代表了整个输入系统.所以它是最重要的?肴下面的代码:
IDirectInput8 gpDI;// 声明全局的 IDircctInput8 对象
Direcilnplut为我们提供了 DirectInpul8Creaie()宿助器函数,卜面是它的啄型:
HRESULT WINAPI DircctInput8Crca(c(
HINSTANCE hlnstancc,// 应用程序实例
DWORD dw Version.// DIRECT1NPUTVERSION
REHID riidhfj/ IIDIDircctlnput8
LPVOID ppvOui, 〃要创立对象的指针
LPUNKNOWN pUnkOutcr);//sct to NULL
这个函数中的大多数参数取饮认值即可,我们只街荽提供所要创立对象的指针即可.
下面我们来看一个完整的创立对象的例子:
IDircctInput8 *gpDI;//global Dircctlnput object
ini
原创力文档


文档评论(0)