Windows游戏之Direct3D输入

  • Windows游戏之Direct3D输入已关闭评论
  • 2,312 views
  • A+

游戏中可以使用的输入方法太多了

先来看看使用的差别

那么使用DirectInput比使用标准的API调用有什么优势呢?
1. Win32 API不是为游戏或者速度而设计的
2. Win32最多只能支持那种简单的摇杆,如果是复杂的摇杆,比如那种带几个轴的,8到10个按钮的等等,Win32就支持不了了。
3. 对鼠标的支持被限制在3个按钮,2个轴,一个滚轮。但是今天的市场上,很多鼠标有4个,5个按钮,甚至更多。
4. Win32对键盘的支持,主要是被设计用来支持键盘输入应用程序的。它有很多可以自动处理重复的键,可以把键码转换成ASCII字符等的功能,但是这些功能,游戏都不需要,而且,这会导致更宝贵的处理器循环的浪费。
5. Win32键盘处理代码虽然可以为你捕获一些键(比如Alt),但是这需要特殊的消息处理,才能够得到正确的操作。
6. 消息处理不是这个世界上最快的事情。应用程序得到了很多所需的鼠标消息,但是你必须等到这些消息队列空了以后才能够渲染桢,这将导致整个应用程序变慢。

使用DirectInput需要进行初始化

就像初始化Direct3D那样

引入头文件

链接库文件

不包含dxguid.lib,使用一些内置变量就会报错

上网搜了下,说是必须包含的

然后就是全局变量了

类似于初始化Direct3D就不解释了

开始初始化(鼠标和键盘的是一样的)

只是指定的标识不一样

1.初始化DirectInput对象

2.初始化DirectInput设备对象

3.设置数据格式

4.设置协作级别

5.获取设备

最后的Acquire就是获取设备的使用权限了

当其他进程占用后,又要重新获取Acquire

不然就会出现问题

同样要记得结束的时候Unacquire和释放内存

下面在游戏循环中读取按键和鼠标信息

先定义保存信息的变量

然后

可以看到我在循环中Acquire

因为我不这样做,它就发神经

这里就不详细说了,看字面意思

运行,都成功了!