游戏开发新手入门之directx入门

上传人:简****9 文档编号:107947137 上传时间:2019-10-21 格式:PDF 页数:16 大小:194.87KB
返回 下载 相关 举报
游戏开发新手入门之directx入门_第1页
第1页 / 共16页
游戏开发新手入门之directx入门_第2页
第2页 / 共16页
游戏开发新手入门之directx入门_第3页
第3页 / 共16页
游戏开发新手入门之directx入门_第4页
第4页 / 共16页
游戏开发新手入门之directx入门_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《游戏开发新手入门之directx入门》由会员分享,可在线阅读,更多相关《游戏开发新手入门之directx入门(16页珍藏版)》请在金锄头文库上搜索。

1、简介 今天我们要接触到令人敬畏的 DirectX。 它比 Windows GDI 要快好几倍,可用于不同的语言和多种平台,支持从绘制象素到高级 3D 图象,从播放简单声音到数字音乐,从键盘控制到反震手柄它给你游戏编程所需的一切(有 点夸张)。当然了,它是巨大的,需要好几本书才能含盖它的全部。先不要去担心我在这里所教 给你之外的数不清的知识,毕竟我把你推到了起跑线上。 阅读本章,你需要前几章的知识和 C 语言的知识,由于我们还要谈到组件对象模型(COM), 它是面向对象系统的基础,你最好还要有一点儿 C的知识。没有也不太要紧,我在讲到这处 时会照顾你的。反正你记住,使用 DirectX 并不需要

2、多少 C的知识。开始吧! 什么是 DirectX? DirectX 是游戏制作者的 API(Application Development Interface)。它是一组允许你直接控制计 算机硬件设备的软件。如果你的硬件支持 DirectX,并且你用硬件加速你的程序,这就意味着一 个字快。不用担心你的硬件知识,你不会真正的接触到它们。我们是通过硬件抽象层(HAL) 和硬件仿真层(HEL)来保证设备无关性和让你的程序正常运行。 DirectX 由很多组件构成,每一个都有特定的用途。组件 DirectDraw 是最为重要的一个,因为所 有的图形都要用到它,它是 2D 图形的引擎,3D 图形也同样离

3、不开它。DirectDraw 是我们今天就 要说的。其它的组件是: DirectSound:提供硬件和软件的声音混合与回放。 DirectMusic:处理基于消息的音乐数据。它支持乐器数字接口(MIDI)并为创建交互式音乐 提供创作工具。 DirectPlay:使得通过调制解调器链接或通过网络来与应用程序相连成为可能。 Direct3D:是一个三维图形包,它提供一个高级的保留模式(Retained Mode)接口,这使得 你能够实现一个完整的三维图形系统。它还包含一个低级的即时模式(Immediate Mode)接口, 使得应用程序获得对渲染管线的完全控制。 DirectInput:为包括游戏

4、杆、鼠标、键盘和游戏控制器在内的输入设备提供支持。它还为反 馈游戏设备提供支持。 DirectSetup:为 DirectX 提供了一个简单的安装过程。它简化了更新显示和音频驱动程序的过 程,并且确保没有硬件或软件冲突的存在。 AutoPlay:让你能够制作一张一旦插入驱动器就能自动安装的光盘。AutoPlay 并非 DirectX 所 独有,因为它是 Microsoft Win32 API 的一部分。 组件对象模型(COM)是 DirectX 的基础,有一些技巧建立 COM 对象别问我怎么做但 你知道一点点还是有好处的。我只是简单说一下,如果你有兴趣,具体的细节就自己查资料吧! 可能下一节你

5、有些困惑,但不要紧,我所说的你不用太明白,毕竟我们的目的是使用 COM 对象, 这可比创建容易多了。 组件对象模型(COM) COM 接口是 DirectX 技术的基础,没有 COM 就没有 DirectX。(不用担心,你只需要对 COM 技 术有一个粗浅的了解就可以使用 DirectX只要你在编写 DirectX 应用程序时遵循一定的步骤, 甚至都可以在不了解 COM 的情况下使用 DirectX。 DirectX的大多数API都是基于COM结构的。 COM为软件模块化和软件重用提供了最坚实的基础, 它的最重要的概念就是接口(interface),接口是软件重用的最基本方法。更专业的说,接口

6、是 一系列操作的规范描述,即接口规范。 所有的 COM 接口都是从 Iunknown 接口继承而来的,IUnknown 接口是所有 COM 接口的根。 IUnknown 接口具有 3 个方法: QueryInterface():此方法查询新接口,并在新接口存在时返回之。 AddRef():此方法在接口或其它应用程序连编到此 COM 对象上时将引用计数值递加 1。 Release():此方法将 COM 对象的引用计数递减 1。当引用计数递减到 0 时,该 COM 对象 自动释放。 所有 COM 对象都具有这三个方法。 虽然 DirectX 应用程序一般不需要考虑引用计数的问题, 但引 用计数确实

7、是存在的,它已经由 DirectX 自动完成了。我们所要做的,就是创建 DirectX 对象,然 后在使用完毕后调用 Release 方法释放引用。 设置 用 DirectX 创建程序,你需要有三件主要的事要做。第一件事是 COM 对象本身,它们包含在.DLL 文件里,这些.DLL 文件需要在 Windows 里注册,这在安装 DirectX 软件包时已经完成了。这些对 象是我们创建 DirectX 应用程序时用到的接口,例如 IdirectDraw。但这还不够,因为在 COM 层 上直接使用 DirectX 是令人沮丧的和乏味的。我们希望有更容易的办法解决它。利用静态库(.LIB 文件)是个

8、好办法,它是 DirectX 软件包的一部分,你可以从 Microsoft 免费获得。它有一个“打 包”函数使你工作更轻松。使用 DirectX 的不同组件,你需要链接不同的静态库。例如你要使用 DirectDraw 组件,你就需要 ddraw.lib。 最后,你还需要 DrectX 头文件,它包含函数原形、宏、常量和你需要用到的各种类型。对于 DirectDraw,这个头文件是 ddraw.h。 要确认你使用了正确的文件版本,你还得让编译器包含软件开发包的目录。具体的做法是: 首先点击 Tool 菜单,选择 Options,然后点击 Directories,在 Show Directorie

9、s for 组合框下拉菜 单中选择 Include files,增加一个新的目录。 将你的 DirectX 的路径填入。 (例如:C:DXSDKinclude) 然后将它移到列表的第一位,使编译时第一个寻找它(防止寻找老版本)。然后选择 Show Directories for 组合框下拉菜单中的 Library files,方法同前,只是把 include 改成 lib。现在,你已 经设置完了 DirectX。你仍然需要手动增加一些库文件到你的项目中,但先不急,我将在以后讲 它。我们将使用 DirectX 7.0。 DirectX 版本号 你可能认为版本号没有什么好讲的,但我们确实要说一说。

10、Microsoft 在 DirectX 里创建了令人难 以置信的科技,但它并不代表不使人迷惑。对于每一个 DirectX 版本,并不是所有的接口都一次 次的升级。 因此, 尽管 DirectX 有了 7 个版本 (我写文章时 DirectX8.0 正准备发布) , 但 DirectDraw 并没有 7 个版本。当 DirectX6 是最新版本时,DirectDraw 的最新接口版本是 IDirectDraw4,不是 IDirectDraw6。现在最新的版本是 DirectX7,所以我们要用 IDrectDraw7。很奇怪,是不是?我想 你已经明白了我的意思,请不用因为以后看到的感到困惑了。 最

11、后一件事。当我写这篇文章时,DirectX7 是最新的可用版本,但或许现在你已经有了 DirectX8, 并且或许你还听说了,DirectDraw 将不再升级了,取代它的是 DirectX Graphics,这是一个功能强 大的图形 API。但 DirectDraw 不升级就意味着我们不学习它了,毕竟都离不开 COM。如果你想用 DirectX8 的接口写 2D 的游戏,你需要用 3D 方法去创建 2D 观点。听起来很棒,是的,的确如此, 因为使用 3D 接口将给你更多的硬件支持,例如阿尔发混合。但这也恰恰是个问题,如果机器没 有相应的硬件设备,程序会以更慢的速度运行。 DirectDraw

12、是很容易学的。由于 DirectX 中的 3D 图形是基于 DirectDraw 的,3D 应用程序在 DirectDraw 环境中执行; 极少有应用程序专门使用 3D。 大多数程序使用 3D 函数对一些对象建模, 而另一些对象,诸如背景和精灵,是以 2D 图形渲染的。所以本系列将使用 DirectDraw。关于 DirectX8,我还没有太多的了解,因此我只能对 DirecX7 做详细介绍。总的来说,你使用 DirectX, 还是离不开 DirectDraw 的。 DirectDraw 概述 在你的程序中使用 DirectDraw,你至少要做四件事,它们是: 1、建立一个 DirectDra

13、w 对象。 2、设置协作等级。 3、设置显示模式和色彩深度(全屏模式)。 4、至少创建一个 DirectDraw 表面。 在讲怎样完成以上步骤之前,先让我们了解一下每一步的含义。第一个,要创建一个 DirectDraw 对象,这意味着我们要建立一个指向 IDirectDraw7 接口的指针。这很简单,不是吗?有三种办法 可以实现它,你可以直接使用 COM,或使用 DirectDraw 的两个函数之一。三种办法各有千秋, 我们过一会儿将详细介绍。第二个,设置操作等级。这可能对你来说比较新鲜。协作是由于 Windows 是一个多任务操作系统而产生的概念。意思是所有运行的程序都要随时告知 Windo

14、ws 它们将要或正在使用的资源,这将保证你所要使用的资源不会被 windows 再分配给别的应用程 序。不用担心,有一个很简单的函数完成它。 第三个你是否有点熟悉?如果你要写一个全屏的程序, 通常是游戏程序, 你需要设置显示模式和 色彩深度。在 Windows 的应用程序里做这些通常不是一个好主意,因为它能导致其它程序的同 时运行出现问题。当你结束自己的程序时,你当然要恢复到改变前的状态。设置全屏模式,只是 调用一个单独的 DirectDraw 的函数,程序结束后,要恢复原来的状态。 最后,也是最重要的,是 DirectDraw 表面的概念。操纵表面是 DirectDraw 的全部。简单的说,

15、 DirectDraw 表面是一个用于存储图象数据的线性内存区域。DirectDraw 表面的大小就是以象素为 单位,用宽和高来定义。所以你可以认为表面是一个用来画图的矩形区域。它有自己的接口,称 作 IDirectDrawSurface7。有三种主要的表面,我们将在本章和下一章分别用到它们。 主表面:每一个 DirectDraw 应用程序都有一个主表面。主表面就相当于用户的显示器。它的 内容是可见的。同理,主表面就是根据显示器的显示模式设定宽和高。 后缓冲区:后缓冲区是紧随主表面的表面,但它不可见。它是动画没有闪烁的主因,通常, 你在后缓冲区画好每一帧,然后把后缓冲区的内容拷贝到主表面,使它

16、显示出来。由于它紧随着 主表面,所以它的大小同主表面相同。(你就理解为楼上和楼下的关系) 离屏缓冲区:它很象后缓冲区,只是它不是紧挨着主表面。尽管你可以用它作任何事,但它 经常被用来存储位图。离屏缓冲区你可以任意设置大小,唯一的限制是你内存的大小。 DirectDraw 表面可以在系统内存中建立, 或直接建立在显示内存中。 如果你都建立在显示内存中, 速度效果将是最好的,如在系统内存就要慢一些了。如果你把一个表面存储在显示内存中,另一 个在系统内存中, 性能会有一些损失的, 尤其是显示卡与主板之间有一个令人恶心的带宽。 总之, 如果能把表面都建立在显示内存中,你或许应该尽力做到。 OK,我们总算有了一点儿认知,让我们看看具体怎么做吧!这儿有一个计划,我们将建立一个 全屏模式下,16 位色彩,640480 分辨率的程序,我将告诉你全部你需要做的。但开始前,你 需要对 Windows 编程有一点了解。想必你看过了前面几章,应该对创建窗口已经熟悉了。由于 这 是 一 个 全 屏 的 程 序 , 你 不 需 要

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号