\Dead or alive, you're coming with me.\—Robocop(電影《機械戰(zhàn)警》)物換星移,仿佛已經是很久以前,我寫了一本名為《WINDOWS游戲編程大師技巧》的書。對于我來說,這本書提供了一個絕好的機會,讓我能夠實現(xiàn)去創(chuàng)造某些東西的夙愿——那就是去寫出一本能夠教會讀者如何制作游戲的書?,F(xiàn)在,已經又過去了幾年,我相信我現(xiàn)在更有經驗,也更聰明了些,并且在這幾年里,我的確又學會了很多游戲制作的竅門,哈哈。這本書,將會續(xù)寫和彌補上一本書所沒有涉及的內容。游戲編程的每一個關鍵主題都將涵蓋其中。我將以我所學,傾囊相授。當然,通常我不會假設讀者已經是一個編程大師,或者已經知道如何制作游戲。這本書將適合高級游戲編程人員閱讀;同時,初學者也同樣適用。雖然如此,本書將以較快的節(jié)奏深化內容,所以,不可掉以輕心?,F(xiàn)今,可能是躋身游戲行業(yè)的人們,有史以來所經歷的最酷的時代。我是說,我們現(xiàn)在可以用所擁有的高科技去創(chuàng)造以假亂真的游戲世界!想像一下,未來的游戲,將會是何面貌?但是,所有這些高新技術并非輕易就能掌握,艱辛的努力必不可少。近來,游戲制作所需要掌握的技能已明顯提高。但是,如果你正閱讀這段文字,或許如我所料,你就是那些樂于迎接挑戰(zhàn)的人中的一員。我要說,你來對了地方,作出了正確的選擇,因為當你掌握了本書內容,你將能夠制作在電腦上運行的全3D,有紋理映射的,具有專業(yè)水平的光照效果的視頻游戲。此外,你還將懂得蘊涵于游戲之中的人工智能、物理建模、游戲算法和2D/3D圖形學的基本原理。同時,你將能夠在現(xiàn)在和將來運用3D硬件。你將學到什么通過本書你將學到數(shù)以TB計的信息!我決心要往你的大腦里面塞入如此之多的信息以至于可能會有些信息溢出來。認真地說,本書覆蓋了全部必要的元素,來創(chuàng)建基于Windows9X/NT/XP/2000平臺的PC游戲:? Win32編程? DirectX基礎知識? 2D圖形和算法? 游戲編程技術和數(shù)據(jù)結構? 多線程編程? 人工智能? 物理建模? 使用3D加速硬件設備(見配套光盤)除了這些,還有更多其它的內容……本書主要討論游戲編程。光盤上帶有兩套完整的在線電子版書籍,涉及Direct3D直接模式和General 3DGraphic。應當具備的基礎知識本書假定你可以編程。如果你還不懂如何編寫C語言程序,那么閱讀本書的某些部分可能會使你感到相當困惑。會讓C語言程序員感到心神不安的是,本書中又有一定的范例程序是用C++寫的。不過別擔心,在我要做任何古怪的事情以前,我將提醒你?;蛟S,如果你需要關于C++程序設計的速成課程,本書的附錄D可作為一份C++入門讀本來使用?;旧媳緯辉谟玫紻irectX的場合里才使用C++。然而,我還是決定要在本書中稍微多用一些C++。因為在游戲編程中有如此之多的事情可用面向對象的方法來概括,若是硬要把它們設計成C風格的結構那簡直是褻瀆了它們。我的底線是:如果你能用C編程,很好。如果你能夠用C和C++編程,那就太好了,閱讀本書對你來說完全不成問題。眾所周知,計算機程序是由邏輯和數(shù)學組成。而3D視頻游戲很強調數(shù)學部分!3D圖形學里的內容幾乎全部涉及數(shù)學。幸運的是那是有趣的數(shù)學(的確,數(shù)學本身可以很有趣)。只要了解一些基本的代數(shù)和幾何知識就可以了。我還將教你關于矢量和矩陣的知識。只要會做加、減、乘、除運算,就可以理解這里90%以上的內容,而不一定要親自進行推導。畢竟,只要能夠應用文章中的代碼,那就夠了。上面所列舉的就是所有你應當具備的基礎知識。當然,你最好告訴所有的朋友,在大約兩年之內他們都將看不到你,因為在這段時間中,你將非常忙碌。但是在你理解制作游戲程序后,就可以盡情享受了!本書的組織《Windows游戲編程大師技巧,第二版》共分為四大部分,計15章和6個附錄。第一部分 Windows編程基礎第一章 無盡之旅第二章 Windows編程模型第三章 高級Windows編程第四章 Windows GDI、控件和突發(fā)奇想第二部分 DirectX和2D基礎第五章 DirectX基礎和令人生畏的COM第六章 首次接觸:DirectDraw第七章 高級DirectDraw和位圖圖形第八章 矢量光柵化及2D轉換第九章 利用DirectInput和力反饋進行輸入第十章 用DirectSound和DirectMusic演奏樂曲第三部分 核心游戲編程第十一章 算法、數(shù)據(jù)結構、內存管理及多線程第十二章 人工智能在游戲中的運用第十三章 基本物理建模第十四章綜合運用第四部分 附錄附錄A CD上的內容附錄B 安裝DirectX和使用C/C++編譯器附錄C 三角函數(shù)和矢量附錄D C++基礎附錄E 游戲編程資源附錄F ASCII表安裝本書的配套光盤本書的配套光盤包含本書所有程序源碼、可執(zhí)行文件、示例程序、美術素材、3D建模工具、音效,和補充的技術文章。目錄結構如下:CD-DRIVE:\\T3DGAMER1\\SOURCE\\ T3DCHAP01\\ T3DCHAP02\\.. T3DCHAP14\\ T3DCHAP15\\APPLICATIONS\\ARTWORK\\BITMAPS\\MODELS\\SOUND\\ WAVES\\ MIDI\\DIRECTX\\GAMES\\ARTICLES\\ONLINEBOOKS\\ENGINES\\每一個主要目錄下含有所需要的具體數(shù)據(jù)。下面是更詳細的分類:T3DGAMER1——含有所有其他目錄的根目錄。請首先閱讀一下README.TXT文件以便了解任何有關本書付印之后才作的改動。SOURCE——含有本書所有的按章節(jié)排列的源代碼目錄。只要將整個SOURCE\\目錄全部復制到硬盤上,就可以從硬盤上運行。DEMOS——含有許多公司授權我放在本書配套光盤里的演示版軟件。ARTWORK——包含可以在你的程序中免費使用的公開的美術素材。SOUND——包含可以在你的程序中免費使用的公開的音效和音樂素材。DIRECTX——包含最新版本的DirectX SDK。GAMES——包含大量我覺得非常不錯的2D和3D的共享游戲軟件。ARTICLES——含有游戲編程領域中的大師們撰寫的可給人啟迪的文章。ONLINEBOOKS——含有一些在線電子版書籍,涉及Direct3D直接模式和General 3D Graphic。ENGINES——含有幾種試用版本的3D引擎。本書的配套光盤由于包含許多不同類型的程序和數(shù)據(jù),因而沒有通用安裝程序。你需要自己安裝。但是,在大多數(shù)情況下,只要將SOURCE\\目錄復制到硬盤上,然后在里面運行就可以了。對于其他程序和數(shù)據(jù),當你需要時安裝就可以了。安裝DirectX本書的配套光盤內你唯一必須安裝的重要部份是DirectX的SDK和運行時文件(RuntimeFile)。安裝程序位于DIRECTX\\目錄,與解釋最新改動的README.TXT 文件在一起。注意你至少要安裝DirectX 8.0SDK,如果你能全面的利用這些光盤就更好。如果你不確定系統(tǒng)里是否有最新的文件,請運行安裝程序,系統(tǒng)會提示你。編譯本書的程序我在Microsoft Visual C++ 5.0/6.0的環(huán)境下編寫了本書所含的程序代碼。多數(shù)情況下這些程序能以任一個與Win32兼容的編譯器來編譯通過。然而,我還是推薦Microsoft VC++,因為用它作這類工作最有效率。如果你對你的編譯器的集成開發(fā)環(huán)境(IDE)還不熟悉,編譯Windows程序的時候你一準會遇到大麻煩。所以請盡管花些時間來熟悉和使用你的編譯器。你至少要懂得如何編譯一個”HelloWorld”的控制臺(console)程序或相似的小程序,然后你才能投入地繼續(xù)編譯其他程序。要編譯生成Windows Win32 .EXE程序,應當將你的應用程序工程的目標程序設定為Win32.EXE再進行編譯。但是要創(chuàng)建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 高彩模式的更多細節(jié),將在DirectX 8.0下通過編譯,還有一個新章節(jié)專門討論文本解析(textparsing),此外貫穿全書更有新增的解釋??傊?,這是《Windows游戲編程大師技巧》的一個更加清楚,更加完全的版本。本書主要討論游戲程序設計;因此,涉及的DirectX僅限于讓讀者充分理解游戲編程中的各個主題。一般情況下,我的原則是讓事情盡可能簡單。DirectDraw和Direct3D的合并對3D應用程序來講是好事,但是對2D游戲和教學來說就有點過于強大和復雜了。因此,我在未發(fā)生改變的地方使用DirectX8.0,同時仍然使用DirectDraw7.0來簡化說明。畢竟,DirectX只是一些技術,而人們總是得為特定應用程序挑選合適的技術來用。