\Dead or alive, you're coming with me.\—Robocop(电影《机械战警》)物换星移,仿佛已经是很久以前,我写了一本名为《WINDOWS游戏编程大师技巧》的书。对于我来说,这本书提供了一个绝好的机会,让我能够实现去创造某些东西的夙愿——那就是去写出一本能够教会读者如何制作游戏的书。现在,已经又过去了几年,我相信我现在更有经验,也更聪明了些,并且在这几年里,我的确又学会了很多游戏制作的窍门,哈哈。这本书,将会续写和弥补上一本书所没有涉及的内容。游戏编程的每一个关键主题都将涵盖其中。我将以我所学,倾囊相授。当然,通常我不会假设读者已经是一个编程大师,或者已经知道如何制作游戏。这本书将适合高级游戏编程人员阅读;同时,初学者也同样适用。虽然如此,本书将以较快的节奏深化内容,所以,不可掉以轻心。现今,可能是跻身游戏行业的人们,有史以来所经历的最酷的时代。我是说,我们现在可以用所拥有的高科技去创造以假乱真的游戏世界!想像一下,未来的游戏,将会是何面貌?但是,所有这些高新技术并非轻易就能掌握,艰辛的努力必不可少。近来,游戏制作所需要掌握的技能已明显提高。但是,如果你正阅读这段文字,或许如我所料,你就是那些乐于迎接挑战的人中的一员。我要说,你来对了地方,作出了正确的选择,因为当你掌握了本书内容,你将能够制作在电脑上运行的全3D,有纹理映射的,具有专业水平的光照效果的视频游戏。此外,你还将懂得蕴涵于游戏之中的人工智能、物理建模、游戏算法和2D/3D图形学的基本原理。同时,你将能够在现在和将来运用3D硬件。你将学到什么通过本书你将学到数以TB计的信息!我决心要往你的大脑里面塞入如此之多的信息以至于可能会有些信息溢出来。认真地说,本书覆盖了全部必要的元素,来创建基于Windows9X/NT/XP/2000平台的PC游戏:? Win32编程? DirectX基础知识? 2D图形和算法? 游戏编程技术和数据结构? 多线程编程? 人工智能? 物理建模? 使用3D加速硬件设备(见配套光盘)除了这些,还有更多其它的内容……本书主要讨论游戏编程。光盘上带有两套完整的在线电子版书籍,涉及Direct3D直接模式和General 3DGraphic。应当具备的基础知识本书假定你可以编程。如果你还不懂如何编写C语言程序,那么阅读本书的某些部分可能会使你感到相当困惑。会让C语言程序员感到心神不安的是,本书中又有一定的范例程序是用C++写的。不过别担心,在我要做任何古怪的事情以前,我将提醒你。或许,如果你需要关于C++程序设计的速成课程,本书的附录D可作为一份C++入门读本来使用。基本上本书只在用到DirectX的场合里才使用C++。然而,我还是决定要在本书中稍微多用一些C++。因为在游戏编程中有如此之多的事情可用面向对象的方法来概括,若是硬要把它们设计成C风格的结构那简直是亵渎了它们。我的底线是:如果你能用C编程,很好。如果你能够用C和C++编程,那就太好了,阅读本书对你来说完全不成问题。众所周知,计算机程序是由逻辑和数学组成。而3D视频游戏很强调数学部分!3D图形学里的内容几乎全部涉及数学。幸运的是那是有趣的数学(的确,数学本身可以很有趣)。只要了解一些基本的代数和几何知识就可以了。我还将教你关于矢量和矩阵的知识。只要会做加、减、乘、除运算,就可以理解这里90%以上的内容,而不一定要亲自进行推导。毕竟,只要能够应用文章中的代码,那就够了。上面所列举的就是所有你应当具备的基础知识。当然,你最好告诉所有的朋友,在大约两年之内他们都将看不到你,因为在这段时间中,你将非常忙碌。但是在你理解制作游戏程序后,就可以尽情享受了!本书的组织《Windows游戏编程大师技巧,第二版》共分为四大部分,计15章和6个附录。第一部分 Windows编程基础第一章 无尽之旅第二章 Windows编程模型第三章 高级Windows编程第四章 Windows GDI、控件和突发奇想第二部分 DirectX和2D基础第五章 DirectX基础和令人生畏的COM第六章 首次接触:DirectDraw第七章 高级DirectDraw和位图图形第八章 矢量光栅化及2D转换第九章 利用DirectInput和力反馈进行输入第十章 用DirectSound和DirectMusic演奏乐曲第三部分 核心游戏编程第十一章 算法、数据结构、内存管理及多线程第十二章 人工智能在游戏中的运用第十三章 基本物理建模第十四章综合运用第四部分 附录附录A CD上的内容附录B 安装DirectX和使用C/C++编译器附录C 三角函数和矢量附录D C++基础附录E 游戏编程资源附录F ASCII表安装本书的配套光盘本书的配套光盘包含本书所有程序源码、可执行文件、示例程序、美术素材、3D建模工具、音效,和补充的技术文章。目录结构如下:CD-DRIVE:\\T3DGAMER1\\SOURCE\\ T3DCHAP01\\ T3DCHAP02\\.. T3DCHAP14\\ T3DCHAP15\\APPLICATIONS\\ARTWORK\\BITMAPS\\MODELS\\SOUND\\ WAVES\\ MIDI\\DIRECTX\\GAMES\\ARTICLES\\ONLINEBOOKS\\ENGINES\\每一个主要目录下含有所需要的具体数据。下面是更详细的分类:T3DGAMER1——含有所有其他目录的根目录。请首先阅读一下README.TXT文件以便了解任何有关本书付印之后才作的改动。SOURCE——含有本书所有的按章节排列的源代码目录。只要将整个SOURCE\\目录全部复制到硬盘上,就可以从硬盘上运行。DEMOS——含有许多公司授权我放在本书配套光盘里的演示版软件。ARTWORK——包含可以在你的程序中免费使用的公开的美术素材。SOUND——包含可以在你的程序中免费使用的公开的音效和音乐素材。DIRECTX——包含最新版本的DirectX SDK。GAMES——包含大量我觉得非常不错的2D和3D的共享游戏软件。ARTICLES——含有游戏编程领域中的大师们撰写的可给人启迪的文章。ONLINEBOOKS——含有一些在线电子版书籍,涉及Direct3D直接模式和General 3D Graphic。ENGINES——含有几种试用版本的3D引擎。本书的配套光盘由于包含许多不同类型的程序和数据,因而没有通用安装程序。你需要自己安装。但是,在大多数情况下,只要将SOURCE\\目录复制到硬盘上,然后在里面运行就可以了。对于其他程序和数据,当你需要时安装就可以了。安装DirectX本书的配套光盘内你唯一必须安装的重要部份是DirectX的SDK和运行时文件(RuntimeFile)。安装程序位于DIRECTX\\目录,与解释最新改动的README.TXT 文件在一起。注意你至少要安装DirectX 8.0SDK,如果你能全面的利用这些光盘就更好。如果你不确定系统里是否有最新的文件,请运行安装程序,系统会提示你。编译本书的程序我在Microsoft Visual C++ 5.0/6.0的环境下编写了本书所含的程序代码。多数情况下这些程序能以任一个与Win32兼容的编译器来编译通过。然而,我还是推荐Microsoft VC++,因为用它作这类工作最有效率。如果你对你的编译器的集成开发环境(IDE)还不熟悉,编译Windows程序的时候你一准会遇到大麻烦。所以请尽管花些时间来熟悉和使用你的编译器。你至少要懂得如何编译一个”HelloWorld”的控制台(console)程序或相似的小程序,然后你才能投入地继续编译其他程序。要编译生成Windows Win32 .EXE程序,应当将你的应用程序工程的目标程序设定为Win32.EXE再进行编译。但是要创建DirectX程序的话,必须在工程中包含DirectX输入库。你可能认为只要将DirectX库添加到你的头文件包含路径(Includepath)中就可以了,但那样不行。为了避免麻烦,将DirectX的众多.LIB库文件手动包含到工程中或者是工作空间(Workspace)中。在安装的DirectXSDK主目录下的LIB\\目录下可以找到.LIB文件。这样就不会导致任何连接错误。大部分情况下,应当还需要下面这些库:DDRAW.LIB DirectDraw输入库DINPUT.LIB DirectInput输入库DINPUT8.LIB DirectInput8输入库DSOUND.LIB DirectSound输入库D3DIM.LIB Direct3D直接模式(或立即模式)输入库DXGUID.LIB DirectX GUID库WINMM.LIB Windows多媒体扩展库对于上述文件,我们将在具体学习时再详细介绍,但是当连接程序报错说“未知的符号(UnresolvedSymbol)”时应记起这些库。我不希望收到初学程序员任何关于这问题的电子邮件。除了DirectX .LIB文件之外,还要在标题搜索路径中包含DirectX.H头文件,这一点同样要牢记在心。还要确认将DirectXSDK目录放在搜索路径列表的第一位,因为许多C++编译器自己带有旧版本的DirectX,编译器可能会在自己的INCLUDE\\目录下找到旧版本的头文件,而使用这些头文件是错误的。正确的位置是DirectXSDK的include目录,即于DirectX SDK安装目录下的INCLUDE\\子目录。最后,如果使用Borland产品,要确认使用DirectX .LIB文件的Borland版本。该文件位于DirectXSDK安装目录下的Borland\\目录。关于第二版《Windows游戏编程大师技巧》的此次修订更新了第一版中的内容。更新是多方面的,诸如清除拼写和技术错误,并且加入新的内容,使得可用DirectX的最新版本来配合编译本书所带的程序代码(在这一版的DirectX里微软公司改编并移除了DirectDraw,真不知道他们是怎么想的!)。这新版书包括关于16位RGB 高彩模式的更多细节,将在DirectX 8.0下通过编译,还有一个新章节专门讨论文本解析(textparsing),此外贯穿全书更有新增的解释。总之,这是《Windows游戏编程大师技巧》的一个更加清楚,更加完全的版本。本书主要讨论游戏程序设计;因此,涉及的DirectX仅限于让读者充分理解游戏编程中的各个主题。一般情况下,我的原则是让事情尽可能简单。DirectDraw和Direct3D的合并对3D应用程序来讲是好事,但是对2D游戏和教学来说就有点过于强大和复杂了。因此,我在未发生改变的地方使用DirectX8.0,同时仍然使用DirectDraw7.0来简化说明。毕竟,DirectX只是一些技术,而人们总是得为特定应用程序挑选合适的技术来用。