|
-- 會員 / 註冊 --
|
|
|
|
游戲編程算法與技巧 ( 簡體 字) |
作者:劉瀚陽 | 類別:1. -> 遊戲 -> 遊戲程式 |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 45434 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:10/1/2016 |
頁數:296 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121276453 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:推薦序 當瀚陽讓我為他的譯作作序的時候,我還是有些吃驚的。我并非業界名人,雖然在游戲行業摸爬滾打了十幾年,但并沒有多少建樹,為了配得上譯者所散發出的光芒,我多少也要發掘出自己的一些亮點。如果資歷也算亮點的話,我倒是有些的。1993 年我有了自己的第一臺電腦,那時的電腦還處于386 的時代,硬盤不過200MB,內存不過4MB,用著5 英寸的軟驅,光驅還在萌芽狀態。當時我一心想做游戲,玩著《Wolf3D》、《Doom》,仰望著id Soft的成就。2001 年我終于如愿進入了游戲行業,有幸趕上了西山居《月影傳說》的后期開發。之后在三大游戲公司轉了一圈,如今沉浮于手機游戲開發的大潮中。其間也曾參與了兩款3D引擎的早期開發工作,其中的成果已融合在兩三款早已上市的游戲當中。我參與程度最深,也算稍微有點名氣的游戲就是《斗戰神》了。 我和瀚陽相識緣于我們現在共同參與的這個項目,我是項目的第一個客戶端程序員,瀚陽是第二個。當項目還只有我一個前臺程序員的時候,我一個人要面對十幾個美工產出的資源和四五個策劃提出的需求,真是壓力很大。瀚陽的加入仿佛給項目增加了第二臺引擎,各種架構迅速完善起來,功能也越來越完整,項目順利度過了Demo 期,得以立項。瀚陽在游戲開發方面涉獵廣泛,精通多種語言,做過端游,寫過手游,參與過3D 引擎開發。游戲開發之外瀚陽也有著廣泛的興趣,他的博客就是自己搭建的,跑在租用的服務器上,可以稱得上是全棧程序員。游戲行業加班是出了名的,對于瀚陽能在繁忙的工作之余抽出時間來翻譯這本書,我是十分佩服的,每一個程序員都不應該局限于自己所在的公司與工作,而應該在更廣闊的空間拓展自己的職業生涯。 最后回到本書。如果你想進入游戲開發行業,或者對于游戲開發你已經入門但還缺乏一個全面的了解,本書可以作為不錯的入門書籍。本書讀起來不會那么累,能夠使你快速了解游戲開發所涉及的眾多領域,建立一個較為全面的認識。在此之后你可以針對感興趣的方面購買學習更加深入的書籍。 騰訊互娛前臺程序技術指導 陳鵬
譯者序 我與本書的一些緣分 我自己是多年的玩家了。在中學時期就暗自下定決心,一定要做游戲。于是不顧反對,大學選擇了游戲專業,后來通過一套類似XNA 的框架進行開發,在學習的過程中一邊寫游戲,一邊擴展框架。從最初的使用DirectX 繪制2D 精靈開發俄羅斯方塊,到寫3D 骨骼蒙皮動畫做3D 射擊游戲,慢慢地學會了很多技術,比如AI、網絡、物理、腳本等。這些知識是“成長”起來的,于是每學到一點新技術都可以往里面塞,逐漸地形成了自己系統的理解。 雕爺有一篇文章說的好,臨摹是最好的學習方法。因為臨摹不僅需要你拆解分析對象作為輸入,還需要以自己的理解作為輸出。這種帶著主動思考的輸入/輸出,無形中就對臨摹對象有了深刻的理解,這不是走馬觀花那種被動的學習效率能比擬的。這種經過充分思考的練習,最能夠將知識“內化”,而只有站在前人的基礎之上,創新才會比較靠譜。在我看來,本書的內容,屬于手把手地對各種GamePlay 拆解,然后實現,讓知識一點一點地成長起來。更加難得的是,因為作者從業界轉向了教育界,所以本書不僅內容上系統全面,而且語言上簡單清晰,讓人易于理解。 興趣是最好的老師,GamePlay 不像操作系統、渲染引擎、物理引擎那么“枯燥”,本書可以很輕松就讀完。初學者完全可以從GamePlay 入手,在XNA 框架上實現書中的內容,然后在深入的過程中補全游戲開發中各個系統的知識。而有經驗者也可以從本書中補全對游戲軟件的系統理解,比如一開始作者就闡明了游戲程序的三要素:游戲時間、游戲對象、游戲循環,還有一些有意思的訣竅,比如用xyzzy 口訣記住叉乘運算,也有一些案例分析——《魔獸世界》的UI 插件系統,以及工作中的教訓——《指環王》中音頻引擎的設置。 除此之外,本書還提供了專業方向上的參考資料,讓讀者在感興趣的話題上深入學習。每章都會提出關鍵問題并列出有深度的參考資料,這些資料大部分是行業經典,比如像《游戲引擎架構》、Real-Time Rendering 這樣的神作當然沒有錯過。 游戲行業是一個很有意思、充滿朝氣的行業,有很多真正熱愛游戲的人。當然,同時有很多問題,但這何嘗不是機會呢? 劉瀚陽 前言 不久之前,開發商業游戲的知識還只有少數游戲界精英才知道。在那時候,學習真正用于AAA 游戲的算法就像學習一些黑暗禁忌的魔法一樣(比如Michael Abrash 的Graphics ProgrammingBlack Book)。如果一個人想要接受游戲編程教育,那么只能去為數不多的培訓學校。可是10 多年過去之后,游戲編程教育發生了非常大的變化。現在一些頂尖的大學也提供了游戲編程的課程和學位,而且每年加入這個領域的人數也越來越多。 游戲開發課程爆發的結果就是,游戲產業更容易招到需要的人員。21 世紀早期的時候,大多數想參與游戲開發的年輕人都擁有著很強的計算機科學背景及創造游戲的熱情。這些有著良好基礎的年輕人,會在后續工作中不斷學習更加高級的游戲編程技巧。今天,有了更多的專注于游戲教育的地方,大量的游戲公司希望他們的年輕程序員可以擁有游戲編程相關的豐富閱歷。 為什么需要這么一本游戲編程的書 游戲課程的增長也激發出大學課程設計的需求。可是現在市場上大多數的書都只面向兩種讀者:希望利用業余時間做點小游戲的愛好者和有著多年經驗的專業人員。兩種書都會讓在校學生感到迷惑。愛好者系列圖書不夠系統嚴謹,太過專業的書學生又看不懂。 我在南加利福尼亞大學講的其中一門課程是ITP 380:游戲編程。課堂上的學生大多數都是大二或者大三的,懂一點編程。有些學生已經能很熟練地運用GameMaker 或者Unity 開發游戲原型了。但ITP 380 是學生們第一門正式的游戲編程課程。我希望本書能夠成為這種課程的最佳補充。雖然受眾是在校學生,但是其他對游戲編程感興趣的人也能獲得很大價值。 本書的一個特色就是前12 章與任何平臺和框架無關。這就是說,本書適用于大部分語言和平臺。這與市場上其他書籍不一樣,那些書往往因為適用某個版本的框架導致幾年之后就沒用了。正因為這種獨立性,本書將會長期適用。這對大學課程設置來說很有幫助,因為他們運用不同的開發框架和語言。這就是說,示例代碼總是有價值的。也因此,最后兩章會使用兩種不同的框架去開發游戲,之前的示例代碼會在這些游戲上體現。 誰應該讀這本書 本書認為讀者已經掌握一門面向對象編程語言(C++、C#、Java),同時也能熟練運用各種數據結構,比如鏈表、二叉樹及哈希表。這些內容通常在計算機科學的前兩個學期就會學到,因此對于那些已經完成這些課程的人來說閱讀本書是沒問題的。更進一步來講,如果能夠掌握微積分,那么后面的線性代數和物理章節讀者會更容易理解。 雖然不是必需的,但如果讀者提前掌握了基礎的游戲策劃或者有熟悉的游戲會有不少幫助。同時,本書會專門討論某種特定的編程機制,所以閱讀參考資料會有更多收獲。有過GameMaker 制作游戲原型經驗的話會更好,但仍然不是必需的。 雖然本書意在為學校而寫,但是對于已經掌握了通用編程技巧而又對游戲專業感興趣的人來說,會很有幫助。不像一些學院派的理論書籍,書中的話題總是通過例子形象地展開。 最后,因為本書涵蓋非常多話題,對希望掌握游戲編程多個方面的人來說也很有幫助。還有一點需要說明,資深游戲開發者不會在本書中找到太多的最新技術。 本書是怎么組織的 本書的前12 章在游戲實戰中演示了許多算法與技術。這些話題涵蓋2D 到3D、物理學、人工智能、攝像機等。雖然設計上第1 章到第12 章是順序閱讀的,但是有些章節可以直接閱讀。圖P.1 把各章節的依賴關系羅列了出來。所以,最好先閱讀依賴章節。 最后兩章的游戲示例是為了運用前面12 章所學到的算法和技術。兩個示例游戲分別是2D滾軸iOS 游戲(用Objective-C 在Cocos2D 上開發)和PC/Mac/Linux 平臺的3D 塔防游戲(用C# 在XNA/MonoGame 上開發)。兩個游戲的源碼可以在本書的網站上下載:http://gamealgorithms.net。 本書演示風格 這節講本書的一些演示約定,比如代碼和公式。 側邊欄和注意 在本書某些位置你能看到一些“側邊欄”和“注意”版塊,像下面這樣。 (圖P.1 前12 章的依賴關系) 側邊欄 在側邊欄中,會討論某些運用在某款游戲中特定的算法和技術。有時候會是一些我所開發的游戲中的趣聞軼事,也有時候會是其他游戲的。不管怎樣,這里會更加深入地討論這些在真實游戲開發中會遇到問題的概念。 注意 注意里更多的是不相關的有趣內容。雖然它們不是那么相關,但可能會讓我們對話題有更加深刻的認識。 偽代碼 為了保持語言的中立性,算法已經以偽代碼的形式展現。偽代碼的語法與Lua 比較近似,雖然也有點像C++ 和C#。代碼展示會像這樣: function Update(float deltaTime) foreach Object o in world // 注釋 o.Update(deltaTime) loop end 代碼高亮與IDE 近似。關鍵詞用藍色,注釋用綠色,類名用藍綠色,變量用斜體。在所有的示例中,訪問都是通過點成員方法和變量實現的。 有些情況下,代碼要被多次討論。在這種情況下,展示的不是代碼的最終版本。通常最后會將所有代碼再展示一次,像清單P.1 那樣。 清單P.1 示例代碼清單 function Update(float deltaTime) foreach Object o in world // 注釋 if o is alive o.Update(deltaTime) end loop end 注意,上面偽代碼中簡單地檢查Object“is alive”,而不是直接調用某個函數。這樣寫會更加清晰。 還有就是,一些代碼可能會由于篇幅原因省略。通常是由于前面剛演示過,中間有大段重復的部分,我們用省略號替代。 function Update(float deltaTime) // 更新代碼 ... end 公式 一些章節(主要是線性代數、3D 渲染、物理學)會通過公式來解釋。這么做會比使用偽代碼更加清晰易懂。公式會居中處理如下: ?? (??) = ?? + ?? 本書網站 本書的網站是http://gamealgorithms.net,內含第13 章和第14 章中游戲的源碼及本書的勘誤。最后,網站中有一個論壇,讀者可以上去提與本書內容或游戲編程相關的問題。 |
內容簡介:本書詳細綜述了應用在許多重要視頻游戲編程中的算法和技術。書中采用了一種獨立于平臺和結構的方法,能協助開發幾乎任何風格、語言和框架的游戲,并展現2D和3D圖像、物理、人工智能、相機等工作的基本技術。書中的每個概念都是用C#、Java或 C++程序員直觀明白的偽代碼闡述的,并且作者已經改進和證實過這些偽代碼。本書最后作者詳細分析了兩個完整的游戲,清楚展現了前面章節講到的很多技術和算法。 |
目錄:第1章 游戲編程概述1 游戲編程的發展2 Atari時期(1977—1985年) 2 NES和SNES 時期(1985—1995年) 3 PS和PS2時期(1995—2005年) 3 Xbox360、PS3和Wii時期(2005—2013年) 3 游戲的未來4 游戲循環4 傳統的游戲循環4 多線程下的游戲循環6 時間和游戲8 真實時間和游戲時間8 通過處理時間增量來表示游戲邏輯8 游戲對象10 游戲對象的類型10 游戲循環中的游戲對象11 總結13 習題13 相關資料14 游戲編程的發展14 游戲循環14 游戲對象14 第2章 2D 圖形 15 2D渲染基礎16 CRT顯示器基礎16 像素緩沖區和垂直同步17 精靈18 繪制精靈18 動畫精靈20 精靈表單23 滾屏24 單軸滾屏24 無限滾屏26 平行滾屏27 四向滾屏28 磚塊地圖29 簡單的磚塊地圖29 斜視等視角磚塊地圖31 總結32 習題32 相關資料33 Cocos2D 33 SDL 33 第3章 游戲中的線性代數 34 向量35 加法36 減法37 長度、單位向量和正規化38 標量乘積39 點乘40 問題舉例:向量反射41 叉乘43 問題舉例:旋轉一個2D 角色45 線性插值46 坐標系47 矩陣48 加法/減法48 標量乘法49 乘法49 逆矩陣50 轉置50 用矩陣變換3D 向量51 總結52 習題52 相關資料53 第4章 3D圖形54 基礎55 多邊形55 坐標系55 模型坐標系56 世界坐標系56 視角/攝像機坐標系60 投影坐標系62 光照與著色64 顏色64 頂點屬性65 光照67 Phong光照模型68 著色70 可見性71 再探畫家算法72 深度緩沖區73 再探世界變換74 四元數75 3D游戲對象的表示77 總結77 習題77 相關資料78 第5章 游戲輸入 79 輸入設備80 數字輸入80 模擬輸入82 基于事件的輸入系統84 基礎事件系統85 一個更復雜的系統87 移動設備輸入89 觸屏和手勢89 加速器和陀螺儀91 其他移動設備輸入92 總結92 習題92 相關資料93 第6章 聲音94 基本聲音95 原始數據95 聲音事件95 3D聲音98 監聽者和發射者98 衰減100 環繞聲100 數字信號處理101 常見數字信號處理效果102 區域標記102 其他聲音話題103 多普勒效應103 聲音遮擋104 總結105 習題106 參考資料106 第7章 物理107 平面、射線和線段108 平面108 射線和線段109 碰撞幾何體110 包圍球110 軸對齊包圍盒111 朝向包圍盒111 膠囊體112 凸多邊形113 組合碰撞幾何體113 碰撞檢測113 球與球的交叉113 AABB與AABB交叉114 線段與平面交叉115 線段與三角片交叉117 球與平面交叉119 球形掃掠體檢測120 響應碰撞124 優化碰撞125 基于物理的移動126 線性力學概覽127 可變時間步長帶來的問題128 力的計算128 歐拉和半隱式歐拉積分129 Verlet積分法129 其他積分方法130 角力學130 物理中間件130 總結131 習題131 相關資料131 第8章 攝像機 132 攝像機的類型133 固定攝像機133 第一人稱攝像機134 跟隨攝像機134 場景切換攝像機135 透視投影135 視場136 寬高比137 攝像機的實現138 基礎的跟隨攝像機138 彈性跟隨攝像機139 旋轉攝像機142 第一人稱攝像機144 樣條攝像機146 攝像機支持算法149 攝像機碰撞149 揀選149 總結151 習題151 相關資料151 第9章 人工智能152 “真”AI 與游戲AI 153 尋路153 搜索空間的表示154 可接受的啟發式算法156 貪婪最佳優先算法157 A*尋路161 Dijkstra算法163 基于狀態的行為164 AI的狀態機164 基礎的狀態機實現165 狀態機設計模式167 策略和計劃168 策略168 計劃169 總結170 習題170 相關資料172 通用AI 172 尋路172 狀態172 第10章 用戶界面 173 菜單系統174 菜單棧174 按鈕175 打字176 HUD元素177 路點箭頭177 準心180 雷達181 其他需要考慮的UI 問題186 支持多套分辨率186 本地化187 UI中間件189 用戶體驗189 總結189 習題189 相關資料190 第11章 腳本語言和數據格式191 腳本語言192 折中192 腳本語言的類型193 Lua194 UnrealScript 195 可視化腳本系統196 實現一門腳本語言197 標記化197 正則表達式198 語法分析199 代碼的執行和生成200 數據格式202 折中202 二進制格式203 INI 203 XML 203 JSON 204 案例學習:《魔獸世界》中的UI Mod 205 布局和事件205 行為206 問題:玩家自動操作206 問題:UI 兼容性206 結論207 總結207 習題207 相關資料208 第12章 網絡游戲 209 協議210 IP 210 ICMP 211 TCP 212 UDP 214 網絡拓撲215 服務器/客戶端216 點對點218 作弊219 信息作弊219 游戲狀態作弊220 中間人攻擊220 總結221 習題221 相關資料222 第13章 游戲示例:橫向滾屏者(iOS)223 概覽224 Objective-C 224 Cocos2D 225 代碼分析226 AppDelegate 226 MainMenuLayer 227 GameplayScene 227 ScrollingLayer 227 Ship 228 Projectile 229 Enemy 229 ObjectLayer 229 練習230 總結231 第14章 游戲示例:塔防(PC/Mac) 232 概覽233 C# 233 XNA 235 MonoGame 235 代碼分析236 設置236 單件236 游戲類237 游戲狀態237 游戲對象238 關卡239 計時器239 尋路240 攝像機和投影241 輸入241 物理242 本地化242 圖形242 聲音243 用戶界面243 練習245 總結246 附錄A 習題答案247 附錄B 對開發者有用的工具260 |
序: |
|