D游戲編程入門(C )_第1頁
D游戲編程入門(C )_第2頁
D游戲編程入門(C )_第3頁
D游戲編程入門(C )_第4頁
D游戲編程入門(C )_第5頁
已閱讀5頁,還剩137頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 HYPERLINK /bookfiles/199 3D游戲編程入門(C#) HYPERLINK /bookfiles/199/1001999370.shtml 目錄 第I部分 Microsoft .NET簡(jiǎn)介第1章 游戲開發(fā)和托管代碼. 31.1 什么是.NET?. 31.2 什么是托管代碼. 51.3 使用Microsoft Visual Studio .NET 2003 IDE編寫代碼. 51.3.1 C#代碼. 61.3.2 VB .NET代碼. 81.4 在命令行中編譯.NET代碼. 91.5 游戲開發(fā)簡(jiǎn)述. 101.6 開發(fā)人員. 101.7 游戲開發(fā)過程. 111.8 工具. 1

2、21.9 小結(jié). 16第II部分 圖形和游戲1的介紹第2章 策劃第一個(gè)游戲. 192.1 提出游戲構(gòu)想. 192.2 理解一個(gè)3D游戲的需求. 212.3 游戲規(guī)范. 242.4 小結(jié). 26第3章 理解示例框架. 273.1 創(chuàng)建項(xiàng)目. 273.2 枚舉所有設(shè)備選項(xiàng). 323.3 小結(jié). 39第4章 在屏幕上顯示. 404.1 創(chuàng)建設(shè)備. 404.2 開始繪圖. 474.3 加載并繪制網(wǎng)格. 484.4 在場(chǎng)景中添加照相機(jī). 514.5 小結(jié). 54第5章 完成代碼. 555.1 理解高分辨率計(jì)時(shí)器. 555.2 處理丟失的設(shè)備. 605.3 添加幀速率輸出. 635.4 設(shè)計(jì)UI界面. 6

3、55.5 設(shè)計(jì)按鈕. 725.6 小結(jié). 75第6章 實(shí)現(xiàn)用戶界面. 766.1 設(shè)計(jì)主菜單. 766.2 插入到游戲引擎中. 816.3 選擇人物(Loopy). 846.4 利用新界面更新游戲引擎. 916.5 小結(jié). 95第7章 實(shí)現(xiàn)玩家和塊. 967.1 編寫Player對(duì)象. 967.2 設(shè)計(jì)塊. 1047.3 小結(jié). 110第8章 實(shí)現(xiàn)級(jí)別對(duì)象. 1118.1 實(shí)現(xiàn)級(jí)別. 1118.2 控制玩家的移動(dòng). 1168.3 處理級(jí)別的更新. 1198.4 小結(jié). 123第9章 綜合應(yīng)用. 1249.1 包含玩家. 1249.2 掛鉤級(jí)別. 1289.3 實(shí)現(xiàn)退出界面. 1329.4 結(jié)束

4、工作. 1359.5 小結(jié). 140第III部分 基本的數(shù)學(xué)規(guī)則第10章 3D數(shù)學(xué)快速入門. 14510.1 2D與3D. 14510.2 使用3D點(diǎn). 14710.3 操作3D對(duì)象. 14810.3.1 平移(移動(dòng))對(duì)象. 14910.3.2 縮放. 14910.3.3 旋轉(zhuǎn). 15010.3.4 坐標(biāo)系. 15010.4 數(shù)學(xué)結(jié)構(gòu). 15110.5 向量. 15110.6 矩陣. 15410.7 小結(jié). 157第IV部分 間接圖形、對(duì)等網(wǎng)、游戲2第11章 開始創(chuàng)建游戲. 16111.1 Tankers 下一個(gè)游戲構(gòu)想. 16111.2 創(chuàng)建Tankers項(xiàng)目. 16311.3 項(xiàng)目的圖形繪

5、制. 16911.4 為紋理構(gòu)建對(duì)象池. 17111.5 小結(jié). 173第12章 開發(fā)更先進(jìn)的用戶界面. 17412.1 使用Blockers的基類(Base類). 17412.2 添加新的基類. 17912.3 實(shí)現(xiàn)主界面. 18212.4 利用用戶界面繪制3D模型. 18912.5 小結(jié). 193第13章 繪制真實(shí)的坦克. 19413.1 理解網(wǎng)格層次結(jié)構(gòu). 19413.2 加載坦克層次結(jié)構(gòu). 19713.3 繪制網(wǎng)格層次. 19913.4 操作坦克. 20113.5 坦克的屬性. 20413.6 創(chuàng)建照相機(jī)類. 20713.7 小結(jié). 210第14章 天空?級(jí)別?玩家!. 21114.1

6、 沒有天空的世界將是黑色的世界. 21114.2 有了一個(gè)天空,但坦克不能驅(qū)動(dòng)到那里. 21414.3 控制坦克. 21614.4 IMoveableObject接口. 22514.5 基本碰撞檢測(cè). 23114.6 小結(jié). 234第15章 準(zhǔn)備,瞄準(zhǔn),開火!. 23515.1 實(shí)現(xiàn)Ammunition類. 23515.2 Bullets集合. 24215.3 完成玩家. 24315.4 添加聲音. 24515.5 小結(jié). 248第16章 避免單人游戲的枯燥. 24916.1 使用DirectPlay. 24916.2 創(chuàng)建會(huì)話. 25516.3 加入會(huì)話. 25716.4 事件處理程序. 2

7、5816.5 發(fā)送及接收數(shù)據(jù). 26016.6 小結(jié). 265第17章 完成Tankers游戲. 26617.1 插入到游戲引擎中. 26617.2 繪制游戲. 27217.3 小結(jié). 275第V部分 高級(jí)繪圖、客戶/服務(wù)器網(wǎng)絡(luò)和游戲3第18章 添加特殊效果. 27918.1 實(shí)現(xiàn)基本粒子系統(tǒng). 27918.2 繪制粒子系統(tǒng). 28718.3 將各部分連接到一起. 29018.4 小結(jié). 292第19章 構(gòu)建自己的游戲. 29319.1 闡明思想. 29319.2 創(chuàng)建自己的項(xiàng)目. 29419.3 設(shè)計(jì)用戶界面. 30019.4 小結(jié). 305第20章 可編程流水線. 30620.1 定義可編

8、程流水線. 30620.2 使用HLSL. 30720.3 編寫Vertex Shader. 30920.4 使用著色增加逼真度. 31420.5 添加Pixel shader. 31520.6 小結(jié). 317第21章 控制細(xì)節(jié)的級(jí)別. 31821.1 簡(jiǎn)化網(wǎng)格. 31821.2 使用簡(jiǎn)化的網(wǎng)格. 32221.3 使用漸進(jìn)網(wǎng)格控制細(xì)節(jié)的級(jí)別. 32321.4 小結(jié). 324第22章 使用繪圖目標(biāo)創(chuàng)建特效. 32522.1 繪制跑道和多輛卡丁車. 32522.2 創(chuàng)建繪圖目標(biāo)和表面. 33122.3 將場(chǎng)景繪制到繪圖目標(biāo). 33322.4 演示后視鏡. 33422.5 小結(jié). 335第23章 理

9、解高級(jí)渲染語言. 33623.1 理解老的shader模型的限制. 33623.2 添加卡丁車鏡面高亮. 33723.3 逐pixel鏡面高亮. 34023.4 小結(jié). 343第24章 關(guān)于性能的注意事項(xiàng). 34424.1 事件模型和Managed DirectX. 34424.2 生成本機(jī)程序集. 34524.3 Boxing惡夢(mèng). 34624.4 Managed DirectX的速度. 34824.5 理解方法的開銷. 34924.6 小結(jié). 350第VI部分 附 錄附錄A 開發(fā)級(jí)別創(chuàng)建器. 353成為游戲開發(fā)人員的條件我所遇到的每一個(gè)開發(fā)人員都至少在某一段時(shí)間想成為一個(gè)游戲開發(fā)人員。對(duì)于

10、很多人來說,視頻游戲不只是空閑時(shí)的一種愛好,他們完全被游戲所吸引。人們沉浸在這些虛擬世界中,常常夢(mèng)想由自己創(chuàng)建如此神奇的天地。不要被美麗的圖形、奇妙的故事情節(jié)和感人悅耳的音樂所愚弄,編寫游戲是非常困難的工作,只有某些特定的開發(fā)人員才能夠獲得成功。除了所需要的技術(shù)天賦之外,一個(gè)優(yōu)秀的游戲開發(fā)人員應(yīng)當(dāng)擁有其他一些技能,例如,您首先是一個(gè)游戲愛好者。如果不是游戲愛好者,則不可能編寫出偉大的游戲,這一條件使得游戲開發(fā)工作更具有挑戰(zhàn)性。成為游戲開發(fā)人員確實(shí)不是一件容易的事情。如果沒有經(jīng)驗(yàn),則不會(huì)被游戲開發(fā)公司聘用,并且當(dāng)沒有公司聘用時(shí),將更難以獲得經(jīng)驗(yàn)。當(dāng)前只有少量的課程以及某些學(xué)校專注于講授游戲的開發(fā)

11、。但是,入門的最好方式是制作一個(gè)樣片(demo reel)。它能向您未來的老板展示您的能力和處理事情的方式。通過本書,您將制作出一個(gè)引人注目的樣片。讀者對(duì)象我常常被問到:“為什么每個(gè)人都想使用.NET Framework編寫游戲程序?”。其他的問題包括:“.NET Framework不是只用于Web服務(wù)器應(yīng)用程序的嗎?”,“它不是很慢嗎?”,等等。對(duì)于游戲開發(fā)人員(或者未來的游戲開發(fā)人員)來說,這些都是很重要的問題,但他們誤解了.NET Framework。.NET Framework不是最新的Web服務(wù)器版本,也不是任何服務(wù)器組件的擴(kuò)展。當(dāng)然能夠使用.NET Framework創(chuàng)建強(qiáng)大的We

12、b服務(wù)器應(yīng)用程序,但是,這并不是它們的全部功能。.NET Framework包括一種功能強(qiáng)大的客戶端應(yīng)用程序編程接口(API)以及Managed DirectX,實(shí)際上.NET開發(fā)人員需要掌握整個(gè)DirectX API。利用它能夠編寫很多新的應(yīng)用程序,包括游戲。如果認(rèn)為.NET Framework只能夠編寫服務(wù)器應(yīng)用程序,則顯得有一點(diǎn)單純。您也可以利用它創(chuàng)建復(fù)雜的客戶端應(yīng)用程序。關(guān)于.NET的性能問題仍然存在,這些問題也很難簡(jiǎn)單描述。當(dāng)引入一門“新的”語言或者運(yùn)行庫時(shí),開發(fā)人員在采用之前,通常比較猶豫。不久以前,很多游戲仍然是采用匯編語言編寫的,因?yàn)橛螒蜷_發(fā)人員不相信C或者C+語言足夠快。.N

13、ET Framework也遵循這個(gè)規(guī)則。在證明.NET Framework的性能之前,游戲開發(fā)人員都會(huì)以一種懷疑的眼光看待它。在本書中,大量的游戲是使用.NET運(yùn)行庫開發(fā)的。事實(shí)勝于雄辯,與其喋喋不休地討論.NET運(yùn)行庫的性能有多好,還不如讓本書中一些真實(shí)的游戲來證明這一點(diǎn)。為什么使用.NET Framework任何曾經(jīng)編寫過Windows程序的人都(無論是否使用.NET Framework)能夠認(rèn)識(shí)到,即使使用Win32 API編寫簡(jiǎn)單的Windows應(yīng)用程序都比較困難。設(shè)計(jì).NET Framework的目的是提供一種較簡(jiǎn)單的方式來執(zhí)行在Windows程序中一些常見的事情,并且為普通的開發(fā)人

14、員自動(dòng)處理很多問題,例如內(nèi)存的管理。利用.NET Framework,開發(fā)人員可以省去很多麻煩的任務(wù),例如花費(fèi)三天的時(shí)間尋找一個(gè)內(nèi)存泄漏bug,他們可以將一些功能直接添加到正在編寫的游戲里面。很多情況下,從游戲中刪除某些好的特性是因?yàn)樾枰ㄙM(fèi)大量的時(shí)間解決問題,而這些問題.NET Framework已經(jīng)為您解決。.NET Framework的另外一個(gè)令人感興趣的特性是語言的中立性。只要所使用的功能兼容公共語言規(guī)范(Common Language Specification,CLS),則可以采用任何能夠使用CLS兼容功能的語言。過去,Visual Basic開發(fā)人員轉(zhuǎn)向使用嚴(yán)格的C+進(jìn)行編碼時(shí),

15、可能比較困難。現(xiàn)在,Visual Basic .NET開發(fā)人員能夠較容易的轉(zhuǎn)向C#,因?yàn)檫@兩種語言之間僅存在較小的語法差別。本書中的代碼是使用C#編寫的。本書的目的編寫本書的目的是為了滿足游戲開發(fā)群體的需求,他們?nèi)鄙訇P(guān)于本書主題方面的信息。由于不能找到所需要的信息,太多可能成為優(yōu)秀游戲開發(fā)人員的程序員選擇了退出。目前市場(chǎng)上的多數(shù)游戲開發(fā)書籍是關(guān)于2D圖形的,它們是比較好的起點(diǎn),但現(xiàn)在編寫的多數(shù)游戲幾乎全是3D圖形的,并且現(xiàn)在的游戲愛好者也希望如此。并不是不需要繼續(xù)編寫2D游戲,但是如果那是游戲開發(fā)人員所能夠做的所有,則他所做的可能毫無用處。本書并不教導(dǎo)您如何去編寫一個(gè)價(jià)值數(shù)百萬美元的游戲。而是

16、給出所有的工具和信息,讓讀者自己學(xué)會(huì)如何開發(fā)3D游戲。在閱讀本書的過程中,將實(shí)現(xiàn)兩個(gè)完整的3D游戲,閱讀完本書后,讀者將能夠設(shè)計(jì)并實(shí)現(xiàn)自己的3D游戲,以使自己成為一名優(yōu)秀的游戲開發(fā)人員。本書中最后的游戲?qū)⒘艚o讀者作為一個(gè)練習(xí)。作者簡(jiǎn)介Tom Miller是Managed DirectX API的設(shè)計(jì)師和首席開發(fā)人員。自1997年開始,他工作于Microsoft公司。他最初在Visual Basic組工作,后來他喜愛上了游戲和游戲編程,因此進(jìn)入了DirectX組。自1999年末,他在DirectX組工作,并且已經(jīng)使得DirectX API(和通常的游戲編程)為更多人所接受。他也編寫了到目前為止最

17、具權(quán)威的關(guān)于Managed DirectX庫的書籍。歡迎您的寶貴意見!作為本書的讀者,您同時(shí)還是本書最重要的批評(píng)家和評(píng)論員。我尊重您的意見,想知道我們?cè)谑裁吹胤阶龅貌诲e(cuò),在哪些地方還能夠做得更好,您最想看到我們提供哪些方面的內(nèi)容,以及您希望傳遞給我們的任何明智的言語。我們非常歡迎您的評(píng)論。您可以給我們寫電子郵件或者直接給我寫信,闡明您喜歡或不喜歡本書的哪些方面 以及我們能夠在哪些方面改進(jìn)本書。請(qǐng)您注意的是,我們不能在與本書主題相關(guān)的技術(shù)問題方面幫助您。但是,我們擁有一個(gè)用戶服務(wù)小組,與本書相關(guān)的特定技術(shù)問題將轉(zhuǎn)寄給他們。信中務(wù)必包含本書的書名和作者,以及您的姓名、電子郵件地址和電話號(hào)碼。我們將

18、仔細(xì)閱讀您的評(píng)論,并將它們與本書的作者和編輯共享。我的電子郵件地址是:feedbacksamspublis信件地址是:Michael StephensAssociate PublisherSams Publishing800 East 96th StreetIndianapolis, IN 46240 USA讀者服務(wù)關(guān)于本書和Sams出版社的其他更多信息,請(qǐng)?jiān)L問我們的網(wǎng)站http:/www.samspublis。在搜索框中輸入ISBN號(hào)(不包括連字號(hào))或者書名,就可以查到您想看的書。也可訪問http:/www.tupwk./downpage/,下載相關(guān)代碼。 HYPERLINK /bookfi

19、les/199/1001999372.shtml 1.1 什么是.NET? 如果熟悉了如何利用CLR(公共語言運(yùn)行庫)編寫代碼后,在面臨選擇開發(fā)語言時(shí),您可能已經(jīng)知道了您的選擇。在Visual Studio .NET產(chǎn)品的最新版本中,當(dāng)編寫托管代碼時(shí),可以使用4種語言:C#、Visual Basic .NET、Managed C+和J#。此外還可以使用從VisualStudio .NET產(chǎn)品之外的第三方銷售商處獲得的其他語言,例如COBOL或者FORTRAN。盡管本書中將討論的概念可以很容易地移植到任何完全兼容CLS(通用語言規(guī)范)的語言,但實(shí)際的代碼將僅包含所提到的前兩種語言:即C#和Vis

20、ual Basic. NET。本書中將僅使用C#代碼。您可以從http:/www.tupwk./downpage中下載本書配套的安裝文件,獲取相關(guān)代碼。在本章中,您將學(xué)習(xí)到: 定義.NET 托管代碼 使用Visual Studio .NET IDE 在命令行中編譯托管代碼 開發(fā)人員 游戲開發(fā)過程 工具1.1 什么是.NET?自從Microsoft公司宣布并發(fā)行.NET之后,人們一直在嘗試指出這種新“事物”到底是什么。根據(jù)Microsoft公司的市場(chǎng)活動(dòng),人們知道它將對(duì)計(jì)算產(chǎn)生革命性作用。這是一個(gè)很宏遠(yuǎn)的目標(biāo),現(xiàn)在斷言它是否能夠完成目標(biāo)還太早。但是,它正在一步步地向此目標(biāo)努力。當(dāng)人們討論.NET

21、時(shí),無法確定他們正在討論.NET的哪個(gè)部分。Microsoft公司發(fā)行的其他“產(chǎn)品”或“思想”都不具有如此多的不同形式。緊隨.NET名字的是眾多的產(chǎn)品、服務(wù),甚至是概念,因此指出.NET實(shí)際上是什么,是非常困難的。當(dāng)本書中討論.NET時(shí),它指從.NET FrameworkSDK中可獲得的新的開發(fā)語言和運(yùn)行庫。該SDK包含.NET運(yùn)行庫。而.NET運(yùn)行庫包含運(yùn)行為.NET環(huán)境編寫的應(yīng)用程序所需要的所有東西??梢哉J(rèn)為.NET運(yùn)行庫由幾部分組成。CLR的部件駐留在GAC(Global Assembly Cache)中。也包括Microsoft .NET語言的編譯器(C#、VB .NET、VJ#等等)

22、??梢栽趫D1-1中看到GAC。圖1-1 GAC人們對(duì)運(yùn)行.NET代碼的最常見誤解之一是,代碼是“解釋執(zhí)行的”,像Java代碼或者老的Visual Basic運(yùn)行庫一樣。事實(shí)上,為.NET編寫的代碼在執(zhí)行前首先被編譯。當(dāng)編譯.NET應(yīng)用程序時(shí),它被編譯為一種中間語言(IL,intermediary language)。這種IL實(shí)際上存儲(chǔ)在可執(zhí)行文件中或者已經(jīng)創(chuàng)建的庫中。IL可能在兩個(gè)位置中的某一處被編譯為本機(jī)代碼(native code)。在安裝代碼時(shí),可以執(zhí)行一個(gè)稱為ngen(native generation,即本機(jī)生成器)的進(jìn)程。它將IL直接編譯為本機(jī)代碼,并將所編譯的本機(jī)代碼存儲(chǔ)在GAC

23、中的特定位置 本機(jī)程序集緩存(native assembly cache)中。假設(shè)在安裝時(shí)沒有編譯代碼,則代碼在第一次執(zhí)行前必須被編譯。在應(yīng)用程序啟動(dòng)期間,.NET運(yùn)行庫中一種稱為JIT(Just In Time)編譯器的特殊功能在后臺(tái)執(zhí)行編譯工作。在后一種情形中,因?yàn)榘l(fā)生在后臺(tái)的編譯工作,應(yīng)用程序的啟動(dòng)時(shí)間將受到影響。當(dāng)啟動(dòng)時(shí)間對(duì)應(yīng)用程序非常重要時(shí)(例如正在編寫游戲時(shí)),確保在安裝階段包含ngen步驟是比較明智的。但是,在這期間無法進(jìn)行某些優(yōu)化,而如果利用JIT編譯代碼,則可以進(jìn)行這些優(yōu)化,因此如果啟動(dòng)時(shí)間不是很重要,則可以讓.NET運(yùn)行庫處理它所能夠做的工作。 HYPERLINK /boo

24、kfiles/199/1001999373.shtml 1.2 什么是托管代碼 1.2 什么是托管代碼在本書中將經(jīng)常提到托管代碼。在全書中使用的API被稱為Managed的DirectX,.NET語言常被稱為托管語言。術(shù)語“托管”來源于.NET運(yùn)行庫具有一個(gè)內(nèi)置的內(nèi)存管理器這一事實(shí)。在“過去”(只是幾年前),使用C和C+編寫代碼的開發(fā)人員不得不自己進(jìn)行內(nèi)存管理。當(dāng)不再需要已分配的內(nèi)存空間時(shí),必須將其釋放,除非希望該內(nèi)存被“泄漏”,內(nèi)存泄漏將帶來嚴(yán)重的性能問題。更糟糕的是因?yàn)橹苯犹幚碇羔?,而它很容易破壞?xiàng)目正在使用的內(nèi)存。在很多情況下,這將導(dǎo)致很長(zhǎng)時(shí)間的故障調(diào)試,因?yàn)橥ǔ?shí)際看到出錯(cuò)的地方并不是

25、內(nèi)存初始被破壞的地方。人們認(rèn)為C和C+語言難于掌握,主要是因?yàn)榫哂泻芏噙@種類型的問題。許多開發(fā)人員不愿意嘗試C和C+,也是因?yàn)檫@個(gè)原因,他們嘗試使用其他沒有這些令人頭痛問題的高級(jí)語言,例如Visual Basic。盡管這些新語言具有易用易學(xué)的優(yōu)點(diǎn),但也具有一些缺點(diǎn)。它們的性能無法與C和C+語言相比,在大多數(shù)情況下顯得特別慢。另外,因?yàn)榈讓硬僮飨到y(tǒng)是使用C+開發(fā)的,所以這些語言難以實(shí)現(xiàn)C+的所有功能。盡管可以使用它們處理很多非常好的工作,但是如果想要獲得操作系統(tǒng)的所有性能和優(yōu)勢(shì),只能依靠自己。與.NET運(yùn)行庫的第一個(gè)版本相比,.NET的大多數(shù)內(nèi)容都已經(jīng)改變了。Microsoft公司幾乎完全重新設(shè)

26、計(jì)了一種新的API,竭力確保開發(fā)人員關(guān)心的問題都會(huì)被解決。這種新的運(yùn)行庫必須易學(xué)易用,快速高效,并且不存在令人頭痛的內(nèi)存管理問題。在本書中,將看到.NET在這些方面的好處 HYPERLINK /bookfiles/199/1001999374.shtml 1.3 使用Microsoft Visual Studio .NET 2003 IDE編寫代碼 1.3 使用Microsoft Visual Studio .NET 2003 IDE 編寫代碼提示:本書設(shè)定在Visual Studio .NET IDE中編寫代碼。這不是使用.NET編寫游戲的需求,也不是使用.NET本身的需求,它是本書所選擇的

27、IDE。圖1-2顯示了Visual Studio .NET 2003 IDE。該IDE提供了編寫.NET應(yīng)用程序所需要的所有工具。它不僅包括編寫代碼所需要的編輯器,而且還有其他大量功能,使得.NET應(yīng)用程序的開發(fā)變得容易。它的設(shè)計(jì)使得您能夠方便地創(chuàng)建豐富的內(nèi)容,如Windows應(yīng)用程序。它也具有一個(gè)內(nèi)置的編譯器和調(diào)試器,并且無縫集成了所有功能。本書設(shè)定使用這種IDE進(jìn)行開發(fā)。圖1-2 Visual Studio .NET IDE熟悉這種IDE的最好方式是使用它編寫一個(gè)簡(jiǎn)單應(yīng)用程序。典型的計(jì)算機(jī)編程是編寫一個(gè)簡(jiǎn)單的Hello World應(yīng)用程序,該應(yīng)用程序只是在屏幕上輸出Hello Word文本

28、。老實(shí)說,這非常令人厭煩,因此您應(yīng)當(dāng)嘗試編寫更復(fù)雜的程序。但也不需要奇特的程序,因?yàn)檫@只是對(duì)IDE的一個(gè)介紹,當(dāng)然在程序中包括一些用戶特性交互將更好。在這里將編寫一個(gè)應(yīng)用程序,詢問用戶的姓名和出生年份,然后輸出用戶的當(dāng)前年齡。1.3.1 C#代碼現(xiàn)在啟動(dòng)Visual Studio .NET 2003 IDE。首次啟動(dòng)時(shí),應(yīng)當(dāng)看到圖1-2所示的默認(rèn)啟動(dòng)頁面。單擊該頁中的New Project按鈕,啟動(dòng)一個(gè)新的項(xiàng)目。如果沒有顯示這個(gè)頁面,也可以單擊File | New Project菜單項(xiàng),或者按下Ctrl+Shift+N快捷鍵。這將產(chǎn)生一個(gè)New Project對(duì)話框,如圖1-3所示。應(yīng)當(dāng)首先嘗

29、試C#代碼,因此在New Project對(duì)話框中,從左邊的列表框中選擇Visual C# Projects項(xiàng),從右邊的列表框中選擇Console Application項(xiàng)。為項(xiàng)目命名,然后單擊OK按鈕創(chuàng)建該項(xiàng)目。這將創(chuàng)建一個(gè)新的控制臺(tái)應(yīng)用程序,當(dāng)前它什么都不執(zhí)行。使用程序清單1.1中的代碼替換自動(dòng)生成的代碼。圖1-3 New Project對(duì)話框程序清單1.1 簡(jiǎn)單的C#控制臺(tái)應(yīng)用程序using System;class ConsoleAppstatic void Main()Console.Write(Hello World C#!rnPlease enter your name:);str

30、ing name = Console.ReadLine();Console.Write(Hello 0, please enter the year you were born:, name);int year = int.MaxValue;while(year = int.MaxValue)tryyear = int.Parse(Console.ReadLine();catch (FormatException)Console.Write(You did not enter a valid number. );Console.WriteLine(Please enter an integer

31、, such as 1975. );Console.WriteLine(You must be approximately 0 years old! ,DateTime.Now.Year-year);Console.WriteLine(Press the key to exit the application);Console.Read();如果您已經(jīng)熟悉了C、C+或者Java,則C#語言的語法與這些語言非常相似。盡管C#的底層運(yùn)行庫仍然是CLR,但是它的語法源于這些語言,熟悉它們的開發(fā)人員很容易進(jìn)行移植。該代碼根本不復(fù)雜,它在詢問用戶的姓名和出生年份之前,首先使用Console類輸出一個(gè)簡(jiǎn)單

32、的消息(該消息包含Hello World)。注意,該應(yīng)用程序接著詢問出生的年份,直到用戶輸入一個(gè)有效的數(shù)值。它最后利用一個(gè)簡(jiǎn)單的公式輸出用戶的當(dāng)前年齡。圖1-4顯示了該應(yīng)用程序的運(yùn)行過程。圖1-4 第一個(gè)應(yīng)用程序1.3.2 VB .NET代碼如果讀者更熟悉Visual Basic語法,很可能能夠理解前文中的大多數(shù)代碼。這兩種語言的語法差別不是很大,但還是應(yīng)當(dāng)嘗試編寫一個(gè)Visual Basic .NET版本的應(yīng)用程序。再次啟動(dòng)一個(gè)新的項(xiàng)目,并采用在C#代碼中所使用的相同指令,其中不同之處是項(xiàng)目的類型。應(yīng)當(dāng)選擇Visual Basic Projects項(xiàng)目,創(chuàng)建該項(xiàng)目后,使用程序清單1.2中的代

33、碼替換自動(dòng)生成的代碼。程序清單1.2 簡(jiǎn)單的VB .NET控制臺(tái)應(yīng)用程序Module Module1Sub Main()Console.Write(Hello World C#! + vbCr + vbLf + Please enter your name:)Dim name As String = Console.ReadLine()Console.Write(Hello 0, please enter the year you were born:, name)Dim year As Integer = Integer.MaxValueWhile year = Integer.MaxVal

34、ueTryyear = Integer.Parse(Console.ReadLine()Catch fe As FormatExceptionConsole.Write(You did not enter a valid number. )Console.WriteLine(Please enter an integer, such as 1975. ) End TryEnd WhileConsole.WriteLine(You must be approximately 0 years old! , DateTime.Now.Year - year)Console.WriteLine(Pre

35、ss the key to exit the application)Console.Read()End Sub MainEnd Module Module1如您所見,從C#到VB .NET的代碼移植并不復(fù)雜。因?yàn)檫@兩種語言運(yùn)行于相同的運(yùn)行庫之上,所以這兩段代碼僅存在微小的語法差別。也應(yīng)當(dāng)注意到,這兩段代碼產(chǎn)生了相同的結(jié)果。這是.NET的一種強(qiáng)大功能,它允許開發(fā)人員使用他最熟悉的語言編寫代碼。如果使用了編程語言X,您不必?fù)?dān)心不能利用編程語言Z中的功能Y。因?yàn)槊恳环N托管語言使用了相同的底層運(yùn)行庫,它們都具有相似的功能集。 HYPERLINK /bookfiles/199/1001999375.s

36、html 1.4 在命令行中編譯.NET代碼 1.4 在命令行中編譯.NET代碼到目前為止,使用Visual Studio .NET IDE是開發(fā).NET應(yīng)用程序最容易的方法,但它并不是僅有的方法。.NET運(yùn)行庫將C#、VB .NET和VJ#的編譯器隨其運(yùn)行庫一起發(fā)布,因此只要有一個(gè)文本編譯器和.NET運(yùn)行庫,就能夠創(chuàng)建任何.NET應(yīng)用程序。提示:為了實(shí)際開發(fā)并使用.NET應(yīng)用程序,需要.NET運(yùn)行庫。如果沒有安裝,您可以從Microsoft的網(wǎng)站http:/www.micro/net處下載。打開一個(gè)文本編輯器(例如Notepad),輸入前面某一個(gè)程序清單中的代碼。保存該代碼,并打開一個(gè)命令提

37、示符。在使用.NET運(yùn)行庫中的編譯器之前,需要設(shè)置路徑,將其指向底層.NET Framework的位置。在命令窗口中,輸入下面的命令更新路徑:set path=%path%;C:WINDOWSMicrosoft.NETFrameworkv1.1.4322警告:如果Windows文件夾不是在C:windows處,當(dāng)更新路徑變量時(shí),確保輸入了正確的Windows文件夾位置。命令行編譯器位于上文所列出的文件夾中,與一些組成.NET運(yùn)行庫本身的程序集相同。C#的編譯器是csc.exe,VB .NET的編譯器是vbc.exe。這些可執(zhí)行文件具有相似的命令行參數(shù)集,可以使用單個(gè)參數(shù)/?來顯示這些編譯器的所

38、有參數(shù)。假設(shè)使用了該代碼的C#版本,并將文件保存為class1.cs,可以利用如下命令將應(yīng)用程序編譯為名為app.exe的可執(zhí)行程序。首先定位到代碼文件所在的文件夾,然后運(yùn)行下面的命令:csc /out:app.exe /target:exe Class1.cs輸出應(yīng)當(dāng)類似于下面的內(nèi)容:Microsoft (R) Visual C# .NET Compiler version 7.10.3052.4for Microsoft (R) .NET Framework version 1.1.4322Copyright (C) Microsoft Corporation 2001-2002. All

39、 rights reserved.現(xiàn)在運(yùn)行該應(yīng)用程序,它將產(chǎn)生與使用IDE作為開發(fā)環(huán)境時(shí)相同的結(jié)果。 HYPERLINK /bookfiles/199/1001999376.shtml 1.5 游戲開發(fā)簡(jiǎn)述 1.5 游戲開發(fā)簡(jiǎn)述在2001年,視頻游戲的收入首次超過了電影工業(yè)的票房收入。該產(chǎn)業(yè)欣欣向榮,并需大量?jī)?yōu)秀的開發(fā)人員。如果一個(gè)公司能夠在某個(gè)頂級(jí)游戲中花費(fèi)上百萬美元,那他們很自然地會(huì)對(duì)游戲開發(fā)團(tuán)隊(duì)非常挑剔。本章將討論游戲開發(fā)的過程和制作這些偉大游戲的團(tuán)隊(duì)。 HYPERLINK /bookfiles/199/1001999377.shtml 1.6 開發(fā)人員 1.6 開發(fā)人員在最近幾年中,作

40、為DirectX組的一員,我非常高興能夠與大量的游戲開發(fā)人員一起討論問題。盡管每一個(gè)開發(fā)人員都是獨(dú)特的,但是他們具有相似的特征。其中最顯然的特征之一是他們都絕對(duì)喜愛游戲。當(dāng)然,這是可以預(yù)料的。游戲開發(fā)是一項(xiàng)艱苦的工作,它時(shí)間長(zhǎng)、任務(wù)緊,壓力大。那些不具有獻(xiàn)身游戲精神的人應(yīng)當(dāng)去編寫沒有這些壓力的軟件。盡管目前對(duì)于一個(gè)游戲工作室來說,宣布在開發(fā)游戲中的花費(fèi)是不常見的,但是許多游戲在開發(fā)期間花費(fèi)了上百萬美元,這是公司發(fā)行游戲的真實(shí)投資。許多游戲需要多年的開發(fā),這需要對(duì)游戲本身和開發(fā)人員、藝術(shù)家、設(shè)計(jì)人員以及任何參與制作的人員具有絕對(duì)的信心。很多時(shí)候,發(fā)行商屈服于壓力,并在游戲準(zhǔn)備好之前就發(fā)行。另外一

41、種情形就像Duke Nukem Forever(3D Realms所發(fā)行的一款游戲)該游戲的開發(fā)時(shí)間超過了5年,發(fā)行商直到它最終完成才發(fā)行?;氐揭曨l游戲開發(fā)的早期(古老的拱廊和Atari家庭系統(tǒng)),游戲通常由一個(gè)或兩個(gè)人編寫,編寫時(shí)間是幾周而不是幾年。由此可以看到當(dāng)今的視頻游戲世界的巨大進(jìn)步。回到那時(shí)您可以制作一個(gè)非常簡(jiǎn)單的游戲,例如Galaga,它只有一個(gè)級(jí)別,玩家只能反復(fù)地在該級(jí)別中進(jìn)行游戲。它的圖形簡(jiǎn)單,但非常有趣并且令人著迷。它的編寫困難嗎?任何曾經(jīng)看到該游戲的開發(fā)人員應(yīng)當(dāng)認(rèn)識(shí)到它非常容易編寫。相反,當(dāng)今的游戲功能非常巨大,必須設(shè)計(jì)、開發(fā)龐大的世界,并且創(chuàng)建一些藝術(shù)資產(chǎn)。大多數(shù)游戲包含

42、多個(gè)級(jí)別和非常復(fù)雜的玩法,而不是早期游戲中所看到的向前向后移動(dòng)并開火。所有這些先進(jìn)的特性需要越來越多的開發(fā)時(shí)間,并且由于當(dāng)今游戲玩家期望這些先進(jìn)的特征,所以任何大預(yù)算的項(xiàng)目似乎都不可能在短短的幾周內(nèi)完成。當(dāng)今的大游戲也對(duì)游戲開發(fā)人員的繁榮添加了一層復(fù)雜性,因?yàn)椴东@大眾注意的游戲不再可能由個(gè)人完成。實(shí)際上個(gè)人(甚至是一個(gè)小組)也不可能將所編寫的游戲放到貨架上出售,因?yàn)橛?jì)算機(jī)軟件商店銷售游戲的開銷是非常高的。大多數(shù)游戲開發(fā)初學(xué)者將他們編寫的游戲作為共享軟件發(fā)行,甚至是免費(fèi)軟件。有大量的網(wǎng)站為共享游戲開發(fā)作貢獻(xiàn),該團(tuán)體由其他許多游戲開發(fā)人員組成,他們提供有價(jià)值的反饋、測(cè)試和論壇,在論壇中可以展示新思

43、想以及炫耀您的最新創(chuàng)作。初學(xué)的游戲開發(fā)人員不可能通過創(chuàng)建這些小的共享游戲變得富有,但卻使得他們能夠開發(fā)重要的“樣片(demo reel)”,在大預(yù)算項(xiàng)目中申請(qǐng)一個(gè)游戲開發(fā)位置時(shí),可以使用這些樣片。正如引言中提到的一樣,本書將引導(dǎo)您學(xué)習(xí)開發(fā)一個(gè)高性能、完全3D的游戲所需要的技能,使得您在某一天能夠開發(fā)自己的樣片。在這之前,您需要詢問自己:準(zhǔn)備好成為一個(gè)游戲開發(fā)人員了嗎?并詢問自己以下幾個(gè)問題: 您喜歡玩視頻游戲嗎? 您是否曾經(jīng)沉迷于游戲而忘記了時(shí)間? 您常常在思考這些世界是如何創(chuàng)建的嗎? 您是否相信自己具有能夠轉(zhuǎn)換為下一個(gè)偉大視頻游戲的構(gòu)想? 您對(duì)當(dāng)今存在的所有相同的老游戲感到厭煩了嗎?您有關(guān)于

44、重新定義流行視頻游戲的構(gòu)想嗎? 您希望我閉嘴,并馬上告訴您如何編寫自己的視頻游戲嗎?如果您對(duì)這些問題中的一個(gè)或多個(gè)回答了“是”,則表示您非??释蔀橐幻螒蜷_發(fā)人員?;蛟S您已經(jīng)具有某些構(gòu)想,但不具備將頭腦中的構(gòu)想通過代碼轉(zhuǎn)化為實(shí)際游戲能力。本書將通過實(shí)際的游戲編程快速教會(huì)您這些技能。 HYPERLINK /bookfiles/199/1001999378.shtml 1.7 游戲開發(fā)過程 1.7 游戲開發(fā)過程所有的游戲開始時(shí)都只是一個(gè)構(gòu)想。如果沒有構(gòu)想,能編寫什么呢?如果只是隨機(jī)的編碼,能夠希望它在未來成為一個(gè)偉大的作品嗎?盡管這對(duì)抽象畫家的工作可能有效,但軟件開發(fā)人員不能在沒有計(jì)劃的情況下做

45、任何事情。但是,只有構(gòu)想,并不意味著可以開始編寫代碼。我曾經(jīng)看到(并且將不斷看到)的最大的錯(cuò)誤是,開發(fā)人員提前進(jìn)行代碼的編寫。除非代碼非常簡(jiǎn)單,不用動(dòng)任何腦筋,那么您可以立即開始編寫代碼,否則在只有一個(gè)構(gòu)想的情況下就開始編寫代碼,決不是好的做法。在沒有計(jì)劃的情況下開始編寫代碼,所帶來的只是更大的工作量、更多的反復(fù)編碼以及更長(zhǎng)的開發(fā)時(shí)間。在編寫代碼之前,應(yīng)當(dāng)開發(fā)一個(gè)設(shè)計(jì)規(guī)范。該文檔應(yīng)當(dāng)包含關(guān)于如何設(shè)計(jì)代碼、對(duì)象如何交互和對(duì)象可能具有的各種屬性的特定信息。如果沒有這一步就直接編碼,在大多數(shù)情況下將導(dǎo)致解決錯(cuò)誤的問題。即使您能夠快速的解決這些問題,但是如果沒有解決正確的問題,工作就是毫無意義的。結(jié)果

46、將會(huì)花費(fèi)更多的時(shí)間為真正的問題尋找解決方案。您也應(yīng)當(dāng)花一些時(shí)間將構(gòu)想記錄到紙上(或者計(jì)算機(jī)文件中)。如果不想讓您關(guān)于下一個(gè)偉大的計(jì)算機(jī)游戲的構(gòu)想非常含糊,以至于設(shè)計(jì)規(guī)范無法描述需要求解哪些問題,那么您最好確保您的構(gòu)想是生動(dòng)的。將構(gòu)想展示給朋友,讓他們提問題,并確保這些問題能夠在您的文檔中得到回答。如果您的構(gòu)想類似于“編寫一個(gè)令人恐怖的第一人射手游戲”,那么說明您還沒有很好地思考您的構(gòu)想。玩家具有什么類型的武器?可以獲得什么類型的游戲模式?支持多人游戲嗎?在采取進(jìn)一步的行動(dòng)之前,您需要很好地思考您的構(gòu)想。如果您正在嘗試為發(fā)行商開發(fā)游戲,那么也需要開發(fā)一個(gè)游戲建議。盡管將這一建議寫入文檔是非常重要

47、的,但在大多數(shù)情形下,更需要一個(gè)足夠好的演示片段。如果只是基于一個(gè)構(gòu)想,發(fā)行商通常不會(huì)將項(xiàng)目交給您(除非您在游戲開發(fā)方面已經(jīng)具有很大名氣,如果是這樣,您將不需要學(xué)習(xí)本書)。 HYPERLINK /bookfiles/199/1001999379.shtml 1.8 工具 1.8 工具編寫偉大的游戲并不只是編寫好的代碼。當(dāng)然這并不表示代碼的編寫不重要,在創(chuàng)建這些游戲時(shí),還需要考慮其他大量因素。所有游戲開發(fā)都需要一個(gè)好的工具集。當(dāng)今的大多數(shù)游戲(即使是嚴(yán)格的2D游戲)都有大量的藝術(shù)成份,這些藝術(shù)成份是采用3D模型軟件包開發(fā)的。這些工具對(duì)于參與游戲開發(fā)的藝術(shù)家來說是無價(jià)的,它們使得浮現(xiàn)在腦海里的構(gòu)想

48、成為現(xiàn)實(shí)。盡管在本書中并不討論如何創(chuàng)建所需要的藝術(shù),但會(huì)提到使用的工具。當(dāng)今所使用的兩種非常流行的數(shù)字內(nèi)容生成工具是Maya和3D Studio MAX,分別如圖1-5和圖1-6所示。但是,創(chuàng)建藝術(shù)并不只是3D建模。即使一個(gè)模型由上百萬個(gè)多邊形組成,如果沒有紋理的話,看上去也是很乏味的。很多工具可以用于創(chuàng)建紋理,例如Photoshop(如圖1-7所示)和Paint(在安裝Windows時(shí)附帶安裝了Paint,如圖1-8所示)。圖1-5 使用Maya建模一個(gè)宇宙飛船圖1-6 使用3D Studio MAX建模一個(gè)妖怪圖1-7 使用Photoshop創(chuàng)建紋理圖1-8 使用Paint創(chuàng)建紋理開發(fā)和藝

49、術(shù)加工工具都是非常好的工具,您將在游戲開發(fā)中使用到它們。還有一些其他類型的工具也非常重要,但很多人甚至沒有考慮到它們,例如一個(gè)優(yōu)秀的源碼控制管理工具。假設(shè)您的游戲具有聲音,那么您很可能需要用于處理聲音文件的工具。可以使用Windows附帶的Sound Recorder(如圖1-9所示),也可以使用比較復(fù)雜的WaveStudio,它是Creative Lab的音頻軟件的一部分(如圖1-10所示)。圖1-9 使用Sound Recorder圖1-10 使用Creative Lab的WaveStudio利用所有這些工具為游戲創(chuàng)建內(nèi)容,您可能需要一個(gè)能夠?yàn)檎麄€(gè)團(tuán)隊(duì)存儲(chǔ)內(nèi)容的工具。很可能有大量的信息需要

50、存儲(chǔ),以及定期備份。最好是只備份新更改和添加的記錄。大多數(shù)源碼控制管理工具至少提供其中某個(gè)功能。Visual Studio 中的Visual Source Safe是一個(gè)簡(jiǎn)單的源碼控制管理工具,它適用于小的團(tuán)隊(duì)。該工具不包含大型團(tuán)隊(duì)所需要的許多強(qiáng)大功能,例如允許多人操作一個(gè)文件和自動(dòng)合并相互沖突的改變等功能,但是對(duì)于一個(gè)小團(tuán)隊(duì)中的小項(xiàng)目來說,它通常能夠滿足需要。還有大量其他的源碼控制工具(例如Perforce),因此您需要做一個(gè)小的調(diào)查,找出哪種工具適合您和您的小組。當(dāng)然,使用任何一種工具都比沒有工具強(qiáng)。 HYPERLINK /bookfiles/199/1001999380.shtml 1.

51、9 小結(jié) 1.9 小結(jié)本章主要介紹了.NET的基礎(chǔ)知識(shí)。相信您已經(jīng)對(duì).NET和托管代碼有大致的了解,并且采用兩種語言編寫了一個(gè)簡(jiǎn)單的應(yīng)用程序。您也學(xué)習(xí)了如何在集成開發(fā)環(huán)境之外編譯這些應(yīng)用程序。至此,已經(jīng)介紹了如何開始進(jìn)行游戲開發(fā)的相關(guān)基礎(chǔ),并且介紹了游戲的開發(fā)人員、開發(fā)過程以及游戲開發(fā)所需要的某些商業(yè)工具。第2章中將介紹游戲開發(fā)相關(guān)的內(nèi)容。 HYPERLINK /bookfiles/199/1001999381.shtml 2.1 提出游戲構(gòu)想 通過第1章的簡(jiǎn)短介紹后,現(xiàn)在開始本書的正題:3D游戲編程。顯然,這個(gè)主題非常復(fù)雜,雖然您的第一個(gè)游戲無法發(fā)行,但是它將幫助您了解游戲開發(fā)基本原則。將游

52、戲構(gòu)想轉(zhuǎn)換為實(shí)際的程序,是您所能夠獲得的最好體驗(yàn)。將大腦中的構(gòu)想轉(zhuǎn)換為其他人能夠欣賞的實(shí)際內(nèi)容,是所有開發(fā)人員的目標(biāo),但當(dāng)這些構(gòu)想與游戲相關(guān)時(shí),回報(bào)似乎更大,而您肯定期望更大的回報(bào)。在本章中,將學(xué)習(xí): 提出游戲構(gòu)想 2D和3D編程差別 細(xì)化規(guī)范2.1 提出游戲構(gòu)想所有的事物都起始于構(gòu)想,游戲也不例外。游戲構(gòu)想可以源于您思考的任何方面?;蛟S您看到您所喜愛的其他游戲,但是您認(rèn)為如果在某些方面作一些變化,它將會(huì)更好?;蛟S您做了一個(gè)夢(mèng),它能夠轉(zhuǎn)換為一個(gè)極好的游戲。或許您意識(shí)到兩個(gè)不相關(guān)的游戲能夠組合在一起,從而創(chuàng)建一個(gè)極佳的游戲。無論您的靈感源于哪里,在您開始制造游戲之前,都需要這樣的靈感。不幸的是,

53、由于還沒有人發(fā)明一本能夠閱讀思想的書,在本書的示例游戲中您只能相信我的思想。本書之所以選擇這些游戲,原因有很多,主要考慮到開發(fā)的難度。但是,每一個(gè)例子都分屬不同的類型,它們覆蓋了游戲開發(fā)過程中遇到的大量不同主題。第一種類型的游戲是拼圖游戲(puzzle game)。您很可能看到過或玩過拼圖游戲。Tetris是一個(gè)典型的拼圖游戲,幾乎每個(gè)人都曾經(jīng)聽過,甚至因?yàn)橥孢@款游戲而廢寢忘食。似乎每個(gè)人也都編寫過Tetris游戲,因此您很可能不愿意選擇它作為您即將編寫的拼圖游戲。另外Tetris是一個(gè)2D游戲(盡管已經(jīng)存在3D類型的Tetris游戲),因此,您也很可能希望跳過它。取而代之的是,您應(yīng)當(dāng)編寫稍微

54、具有特色的游戲。該游戲基于一個(gè)面板。該面板由一系列的立方體組成,每個(gè)立方體處于一種未確定模式,并且每個(gè)立方體至少與一個(gè)其他立方體直接相鄰。棋盤是滿足這些標(biāo)準(zhǔn)的一個(gè)面板例子。其中每個(gè)立方體具有一種特定的顏色,當(dāng)玩家走到某個(gè)立方體上時(shí),它將變?yōu)榱硗庖环N預(yù)定顏色。在某一級(jí)別中,當(dāng)每個(gè)立方體處于正確的顏色時(shí),該級(jí)別結(jié)束。細(xì)化提議正如第1章所介紹的一樣,一旦游戲的基本構(gòu)想已經(jīng)建立,您應(yīng)當(dāng)花費(fèi)一些時(shí)間討論游戲的各種提議,以確保您的思考足夠全面。對(duì)于這個(gè)游戲,下面是有助于細(xì)化提議的一個(gè)列表: 稱為Blockers的拼圖游戲 只支持單個(gè)玩家 完全3D環(huán)境 得分基于完成一個(gè)級(jí)別所使用的時(shí)間 每個(gè)級(jí)別由一系列相鄰

55、的立方體組成,例如一個(gè)棋盤 每個(gè)立方體一種顏色 在某個(gè)級(jí)別中,當(dāng)每個(gè)立方體顏色相同,并且是該級(jí)別預(yù)定的“終止”顏色時(shí),該級(jí)別結(jié)束 每個(gè)級(jí)別有一個(gè)最大時(shí)間限制 每個(gè)立方體有一個(gè)顏色列表 最少包括兩種顏色,最多包括六種顏色 玩家通過在立方體上“跳動(dòng)”來進(jìn)行游戲,跳動(dòng)時(shí)將立方體的顏色改變?yōu)榱斜碇邢乱环N顏色 起始級(jí)別中,每個(gè)立方體的顏色列表有兩種顏色 在更高級(jí)別中,每個(gè)立方體的顏色列表將具有更多的顏色,因此游戲的難度增加 如果玩家能夠完成這些級(jí)別,則允許顏色列表返回初始狀態(tài),來增加游戲的難度 如果玩家不能在最大時(shí)間限制內(nèi)完成游戲,則游戲結(jié)束這個(gè)列表描述了游戲的每個(gè)特征嗎?很可能沒有,但是它回答了在策劃

56、游戲之前需要回答的主要問題。策劃階段并不是對(duì)游戲的每個(gè)功能進(jìn)行細(xì)化,在您開始開發(fā)之前理解這一點(diǎn)是非常重要的,但是更需要您思考游戲需要的特征。在不考慮實(shí)際需要的功能的情況下就提前投入并編碼,將導(dǎo)致后面的工作更困難,以至于您可能需要補(bǔ)充某些遺失的內(nèi)容,或者因?yàn)轸斆У挠?jì)劃而導(dǎo)致工作完全錯(cuò)誤。根據(jù)計(jì)劃,現(xiàn)在您可以開始設(shè)計(jì)游戲中使用的對(duì)象模型。對(duì)象圖并不復(fù)雜。您具有神秘的游戲引擎,它保存了關(guān)于玩家、當(dāng)前級(jí)別和繪圖設(shè)備(rendering device)的信息。繪圖設(shè)備用于將游戲的圖形顯示在顯示器上。玩家需要某種類型的可視化表示,繪圖設(shè)備將處理這些。該游戲的大多數(shù)地方需要當(dāng)前級(jí)別的信息。當(dāng)前時(shí)間非常重要,

57、因?yàn)樗糜诖_定玩家的分?jǐn)?shù)和游戲結(jié)束時(shí)間(如超時(shí),游戲即結(jié)束),因此當(dāng)前級(jí)別必須訪問它。實(shí)際的級(jí)別存儲(chǔ)在文件系統(tǒng)中,位于應(yīng)用程序的媒體目錄中。因?yàn)楫?dāng)前級(jí)別需要加載一個(gè)已經(jīng)存在的級(jí)別,所以它也需要訪問這些信息。級(jí)別需要記錄的信息是組成級(jí)別的立方體列表。每一個(gè)級(jí)別需要至少兩個(gè)立方體,但是可以添加更多的立方體以滿足更高的級(jí)別。該游戲并不容易編寫,但是它并不需要?jiǎng)?chuàng)建多個(gè)對(duì)象確保滿足游戲的目標(biāo)。該游戲也非常好玩,只要更難的級(jí)別不會(huì)難到讓玩家無法完成。一個(gè)游戲決不能夠讓玩家感到苦惱。如果游戲不好玩,則沒有人會(huì)玩,該游戲也不可能成功。 HYPERLINK /bookfiles/199/1001999382.s

58、html 2.2 理解一個(gè)3D游戲的需求 2.2 理解一個(gè)3D游戲的需求認(rèn)識(shí)到這個(gè)游戲(實(shí)際上任何游戲都是這樣)不需要?jiǎng)?chuàng)造為完全3D的世界,是非常重要的??紤]到您的顯示器很可能是一個(gè)矩形的平板,最終3D圖形將顯示在一個(gè)2D平面上。創(chuàng)建一個(gè)2D組圖(sprite)的集合,該集合將覆蓋每一種可能的場(chǎng)景,但是這種情況下所需要的藝術(shù)資產(chǎn)是巨大的。查看下面的例子。假設(shè)已經(jīng)安裝了DirectX SDK Summer 2004 Update,請(qǐng)加載DirectX Sample Browser(圖2-1),確保Managed選項(xiàng)是左邊被選中的惟一項(xiàng)。單擊Direct3D標(biāo)題,向下尋找Empty Project

59、項(xiàng),并單擊Install Project鏈接,遵循向?qū)У牟襟E創(chuàng)建項(xiàng)目(將該項(xiàng)目命名為“Teapot”)。項(xiàng)目創(chuàng)建后,將其加載到IDE中。圖2-1 DirectX Sample Browser這將創(chuàng)建一個(gè)新的“空”項(xiàng)目(它實(shí)際上生成了某些用戶界面控件,但是現(xiàn)在,那些都被忽略)。但是,該項(xiàng)目中還不存在任何3D,由于這個(gè)練習(xí)的目的是演示為什么希望編寫3D游戲,所以最好添加一些內(nèi)容。在這個(gè)項(xiàng)目中添加少量的代碼,生成一個(gè)慢速旋轉(zhuǎn)的茶壺。您要添加幾行代碼,使得該應(yīng)用程序能夠進(jìn)行圖形繪制,在本章中不對(duì)這些代碼功能進(jìn)行解釋。在本書的后面將給出大量的篇幅解釋這些代碼,但對(duì)于目前的演示來說,它們不是必需的。假設(shè)您

60、將項(xiàng)目命名為“Teapot”,打開代碼文件teapot.cs并將下面兩個(gè)變量添加到這個(gè)類文件中:private Mesh teapotMesh = null; / Mesh for rendering the teapotprivate Material teapotMaterial; / Material for rendering the teapot現(xiàn)在創(chuàng)建茶壺和用于繪制場(chǎng)景的材質(zhì),找到該類中的OnCreateDevice方法,將下面的代碼添加到該方法的結(jié)尾處:/ Create the teapot mesh and materialteapotMesh = Mesh.Teapot(de

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論