VC++2010游戏开发随记之四十二 - 图文

2020-02-21 11:24

【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场

在本篇文章中,我们一起详细探索了DirectInput这套在PC游戏即时控制方面一手遮天的API。下面先来看一下这篇一万多字文章的大体脉络。首先我们对DirectInput接口进行了整体上的讲解,然后深入DirectInput的使用步骤进行具体的探索,最后浅出,归纳出DirectInput使用五步曲,方便大家的快速掌握。文章最后,我们配了一个比较好玩的demo来让大家对本篇文章所学的DirectInput的使用融会贯通,最后提供了这个demo详细注释的源代码下载。先放一个demo的截图吊吊大家胃口,哈哈:

一、引言

众所周知,在普通的Windows程序中,用户通过键盘或者鼠标输入的消息并不是应用程序直接处理的,而是通过Windows的消息机制转发给Windows操作系统的。Windows操作系统对这些消息进行响应后,在通过回调应用程序的窗口过程函数进行相应的消息处理。

这显然满足不了对于性能要求比较苛刻的游戏程序的。在DirectX中,微软为我们提供了名为DirectInput接口对象来实现用户输入的。DirectInput直接和硬件驱动打交道,因此处理起用户的输入来说非常迅速。

首先需要给大家说明的是,DirectInput这套API自DirectX8更新以来,功能已经足够完善了。所以尽管当前DirectX的最新版本上升到了DirectX 11,DirectInput还是DirectX 8那个版本时代的老样子,API的内容和功能随着最近几个版本的更迭却原封不动,名称上也保留了8这个版本号,依然叫DirectInput 8,可谓以不变应万变。即目前最新版本的DirectInput ,依旧是DirectInput 8。

二、DirectInput接口概述

DirectInput作为DirectX的组件之一,自然依然是一些COM对象的集合。DirectInput由IDirectInput8、IDirectInputDevice8,IDirectInputEffect这三个接口组成,这三个接口中又分别含有各自的方法。

总的来说,当前版本的DirectInputAPI中,三个接口,四十七个方法,组成了这个在电脑游戏开发中不可或缺的组件。

由于IDirectInput8 API整体来说规模不大,说白了也就是三个接口,四十七个方法,不妨我们在文章中将他们一一列举出来,也让大家窥一窥DirectInput API的全貌。

1.IDirectInput8接口 函数一览

IDirectInput8::ConfigureDevices Method IDirectInput8::CreateDevice Method IDirectInput8::EnumDevices Method

IDirectInput8::EnumDevicesBySemantics Method IDirectInput8::FindDevice Method IDirectInput8::GetDeviceStatus Method IDirectInput8::Initialize Method IDirectInput8::RunControlPanel Method

2.IDirectInputDevice8接口 函数一览

IDirectInputDevice8::Acquire Method IDirectInputDevice8::BuildActionMap Method IDirectInputDevice8::CreateEffect Method

IDirectInputDevice8::EnumCreatedEffectObjects Method IDirectInputDevice8::EnumEffects Method IDirectInputDevice8::EnumEffectsInFile Method IDirectInputDevice8::EnumObjects Method IDirectInputDevice8::Escape Method IDirectInputDevice8::GetCapabilities Method IDirectInputDevice8::GetDeviceData Method IDirectInputDevice8::GetDeviceInfo Method IDirectInputDevice8::GetDeviceState Method IDirectInputDevice8::GetEffectInfo Method IDirectInputDevice8::GetForceFeedbackState Method IDirectInputDevice8::GetImageInfo Method IDirectInputDevice8::GetObjectInfo Method IDirectInputDevice8::GetProperty Method IDirectInputDevice8::Initialize Method IDirectInputDevice8::Poll Method

IDirectInputDevice8::RunControlPanel Method IDirectInputDevice8::SendDeviceData Method

IDirectInputDevice8::SendForceFeedbackCommand Method IDirectInputDevice8::SetActionMap Method IDirectInputDevice8::SetCooperativeLevel Method IDirectInputDevice8::SetDataFormat Method

IDirectInputDevice8::SetEventNotification Method IDirectInputDevice8::SetProperty Method IDirectInputDevice8::Unacquire Method IDirectInputDevice8::WriteEffectToFile Method

3.IDirectInputEffect接口 函数一览

IDirectInputEffect::Download Method IDirectInputEffect::Escape Method IDirectInputEffect::GetEffectGuid Method IDirectInputEffect::GetEffectStatus Method IDirectInputEffect::GetParameters Method IDirectInputEffect::Initialize Method IDirectInputEffect::SetParameters Method IDirectInputEffect::Start Method IDirectInputEffect::Stop Method IDirectInputEffect::Unload Method

其中,IDirectInput8作为DirectInput API中最主要的接口,用于初始化系统以及创建输入设备接口,DirectInput中其他的所有的接口都需要依赖于我们的IDirectInput8之上,都是通过这个接口进行查询的。而DirectInputDevice8接口用于表示各种输入设备(如键盘、鼠标和游戏杆),并提供了相同的访问和控制方法。对于某些输入设备(如游戏杆和鼠标),都能通过查询各自的IDirectInputDevice8接口对象,得到另一个接口IDirectInputEffect8。而IDirectInputEffect8接口则用于控制设备的力反馈效果。

三、DirectInput使用步骤详解

1.头文件和库文件的包含

我们首先需要注意的是,在使用DirectInput时,需要保证我们包含了DInput.h头文件,并且在项目中已经链接了DInput8.lib库文件。 当然,库文件我们也可以动态添加:

[cpp] view plaincopyprint?

1. #pragma comment(lib, \使用DirectInput必须包含

的头文件,注意这里有8


VC++2010游戏开发随记之四十二 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:船舶管理笔记(1)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: