深度探索DxFramework 1

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

第1章 DxFramework工程简介

1.1 工程的来源和作者

DxFramework是由Corey于年月发起的。Corey 开发了项目中最初的2D游戏引擎。并且负责了游戏所需的艺术资源的相关工作。他创建了DxFramework的第一个版本。Corey现在在Maxis公司工作,不再是DxFramework的主要的开发者了。而随后加入的Jonathan现在已经是项目管理员。他在Laird教授的领导下参与了程序设计的很多方面的工作。还有一位重要的贡献者是David Yeung,作为DxFramework的重要组成部分的3D Framework和相关示例demo的最原始的版本正是由David Yeung所编写的。还有就是Nuttapong,Nuttapong在David Yeung之后对3D Framework部分做了大量的扩充,增加了许多的功能以及一些demo和sample。

另外还对DxFramework作出贡献的人员还有:

Adam Tercala创建了world map demo的最初版本 Jeremy Lee创建了sound demo(DEMO C)的最初版本,并且撰写了C_Sound类 Evan Leung创建了最初的用户接口类(User Interface Object class C_UIObject)以及一系列继承自此类的其他类。

1.2 工程的配置

本书剖析的版本是0.93版本,这个版本是2004月8月16日发布的。也是在本书截稿为止的最新版本。在DxFramework的主页中所发布的是三个Zip格式的压缩包。它们分别是:

DxFramework-binary-0.9.3.zip DxFramework-engine-0.9.3.zip DxFramework-0.9.3.zip

DxFramework-binary-0.9.3.zip只是包含了DxFramework的所发布的可执行数据文件版本。没有相关的源代码。而DxFramework-engine-0.9.3.zip也只是包含了DxFramework的引擎框架代码,而没有示例的代码以及运行所需要的相关文件和数据。而DxFramework-0.9.3则两者兼备。如果是利用DxFramework来编写我们自己的游戏,那么当然选择基于DxFramework-engine-0.9.3,但是本书是通过剖析引擎和示例代码来学习游戏设计技术的,因此本书的剖析对象是DxFramework-0.9.3.zip的内容。

下载解压缩之根目录有如下的一些文件和目录,目录如下:

目录 内容
Data 存放示例demo"pic pac"所需的地图数据文件
Docs 存放DxFramework相关的文档
Images 存放DxFramework所需的一些艺术资源,比如一些示例程序所需要的图片等等
Resources 存放DxFramework所用到的图标文件,里面是big.ico和small.ico文件
Sounds 存放DxFramework使用到的一些声音文件,有wav,mp3,mid格式
Source 存放了DxFramework的引擎和示例的原代码,这里面的内容便是本书的重点部分
Frustum 点击鼠标将能绘制该视截体的轮廓,这样可以移开camera到别的位置去看看这个视截体像什么。悬浮在空中的球,当鼠标点击的时候,它会依据它在视截体内与否来决定是否改变其纹理。
Models Models Demo装载了MD2格式的模型和X格式的模型。MD2的动画可以循环播放
Seek and Hide 追踪和躲藏,演示一个简单的AI游戏
Simple Demo 本demo演示了如何使用DxFramework来开发一个3D游戏。这个demo的代码有很多的注释和演示。
Ray Tracking 这个demo演示了如何使用鼠标来点击选中不同的DxFramework图元。鼠标点击点将会变成一个会延伸扩展的球的球心。
LandScape and Billboard 本demo展示一个通过高度图生成的风景地貌。另外还展现了公告板技术。
Split 演示如何把一个基本图元切割成更小的基本图元
MD3 Demo 演示了使用ID Software定义了md3文件格式的模型
BSP 演示了使用二叉空间分割树(binary space partitation tree)对场景数据进行组织

文件如下:

文件 内容
changelog,txt 关于代码修改的日志文件
doxygen.txt Doxygen用来从代码中抽取注释生成代码注释文档的数据文件
doxygen.dox Doxygen用来从代码中抽取注释生成代码注释文档的数据文件
doxygen-engine.dox Doxygen用来从代码中抽取注释生成代码注释文档的数据文件
DxFramework.sln DxFramework的工作区文件
dxframework.vcproj DxFramework的工程文件
LICENSE.txt 授权文件
ReadMe.txt 描述文件

1.3 工程的各个DEMO介绍

到目前为止,DxFramework一共提供了共19个充分展示了这一engine的能力的demo,它们如下表:

DEMO名称 内容介绍
DemoA DemoA是一个非常简单的demo。这个demo覆盖了alpha混合,精灵和精灵动画,以及基本的键盘输入等技术。使用方向键来移动screen里的一个小BOX。通过改变屏幕所显示的alpha值,BOX将会在一段时间内慢慢消失,然后又慢慢重现。通过指定精灵文件的名字可以把BOX以精灵动画的形式来表现。当调用Animation()的时候,animates将会周期性地切换帧来达到动画的效果
DemoB DemoB是另外一个简单的示例。这次集中演示了game object的使用。如碰撞检测,还有一个非常简单的物理运动模型。通过点击鼠标或者按下向上箭头键可以添加球。如果使用鼠标来添加球,在释放鼠标前可以通过移动鼠标来给这些球一个初始速度。当球与墙或者是球与球之间发生碰撞之后将会发生反弹(球,墙都是game object),按向下箭头键将逐个移去球
DemoC DemoC将简单介绍在DxFramework中使用DirectShow。在屏幕四角的糖果分别表示四个不同的文件。点击这些糖果将会播放不同的声音文件
Pong Pong将是项目中的第一个游戏。DirectPlay在此以一种简单的示例形式来使用。两人可以联机对战,这里,不能两人同时使用一台机器进行游戏,这就留待给读者作为练习
Worldmap World map demo是被设计成如何创建一个经典的2D RPG类型的地图的示例。这里没有很多需要探险的地图,当不等于说这个demo没有更多的东西可做。值得注意的是这些地图数据是存储在一个简单的文本文件中的,所以很容易修改。
Pac Pac是吃豆子游戏的翻版。这也是另一个2D游戏demo。这个demo囊括了计时,动画,用户输入,地图数据组织等技术。和world map技术一样。这个游戏的地图数据是存储在一个简单的文本文件中的,所以很容易修改和扩充。
3D primitives 这是第一个3D demo,显示了几个不同的3D基本图元。还设置了基本的摄像机行为
Cameras 这个demo主要集中在camera的定义和camera的描述上。Camera被放在一个大盒子内部。移动鼠标可以转动镜头四处观察。WASD键平移镜头,同时雾化效果也将在本Demo中展现。不同的类型和参数设置将会能得到即时的处理
Lights 这个demo主要集中展现了简单的DxFramework所能支持的光照效果
Materials and Texture 这个demo试验了不同的材质和纹理效果。左边的BOX是用来接受不同的参数操作的,而右边的BOX则是用来作为参照物。
Basic Collision DemoB的3D版本。这个demo用了一个很简单的,不甚精确的物理模型来模拟3D空间中碰撞。球形包络盒将用来做快速的碰撞检测
Multitextures 与3D Primitive Demo相似。本Demo试验了在基本图元上添加多纹理功能混合的功能
Frustum 与camera demo相似。本demo使用视截体剪除了在视野之外的部分。点击鼠标将能绘制该视截体的轮廓,这样可以移开camera到别的位置去看看这个视截体像什么。悬浮在空中的球,当鼠标点击的时候,它会依据它在视截体内与否来决定是否改变其纹理。
Models Models Demo装载了MD2格式的模型和X格式的模型。MD2的动画可以循环播放。
Seek and Hide 本demo演示了如何使用DxFramework来开发一个3D游戏。这个demo的代码有很多的注释和演示。
Ray Tracking 这个demo演示了如何使用鼠标来点击选中不同的DxFramework图元。鼠标点击点将会变成一个会延伸扩展的球的球心。
LandScape and Billboard 本demo展示一个通过高度图生成的风景地貌。另外还展现了公告板技术。
Split 演示如何把一个基本图元切割成更小的基本图元
md3 Demo 演示了使用ID Software定义了md3文件格式的模型
BSP Demo 演示了使用二叉空间分割树(binary space partitation tree)对场景数据进行组织