發表於2024-11-23
1.本書全麵介紹遊戲行業中會用到的算法和技術,包括2D、3D圖形學,物理,人工智能,攝像機等多個方麵。
2.采用瞭獨特的與平颱架構無關的方法來展開開發,適用於任何遊戲、風格、語言、框架。
3.每個概念的展示都使用瞭僞代碼,並經過驗證,容易被程序員們理解。
4.本書最後以兩款完整遊戲作為總結,使用瞭很多書中介紹的算法和技術,全部源代碼都可下載。
5.請迴顧每一章課後習題,能鞏固所學,助你前進。
本書詳細綜述瞭應用在許多重要視頻遊戲編程中的算法和技術。書中采用瞭一種獨立於平颱和結構的方法,能協助開發幾乎任何風格、語言和框架的遊戲,並展現2D和3D圖像、物理、人工智能、相機等工作的基本技術。書中的每個概念都是用C#、Java或 C++程序員直觀明白的僞代碼闡述的,並且作者已經改進和證實過這些僞代碼。本書最後作者詳細分析瞭兩個完整的遊戲,清楚展現瞭前麵章節講到的很多技術和算法。
劉瀚陽,騰訊互娛高級工程師,Life-long級彆的遊戲玩傢。興趣使然,大學本科就選擇瞭遊戲專業,畢業後一直專注於遊戲研發。參與過遊戲引擎、大型商業MMORPG、中小型手遊的開發。擅長遊戲架構設計與開發,代碼寫得賊溜,略懂産品。一直在遊戲行業中默默前進,希望有一天也能做齣一款偉大的遊戲。
Sanjay Madhav 是南加利福尼亞大學的講師,在那裏他教授瞭幾門與遊戲編程相關的課程。而在全職加入南加利福尼亞大學之前,他作為程序員在許多公司工作過,包括Electronic Arts、Neverso�� 及Pandemic Studios。雖然他在很多係統上都有著豐富的開發經驗,但是他*感興趣的還是遊戲機製的開發。他所參與的遊戲包括《榮譽勛章:太平洋突襲》(Tony Hawk’s Project 8)、《指環王:徵服》(Lord of the Rings: Conquest)和The Saboteur。
從2008 年開始,Sanjay 在南加利福尼亞大學兼職,當時他還是全職遊戲程序員當中的一員。在2009 年年末Pandemic Studios 關閉之後,他決定專注於教越來越重要的遊戲程序員。他的主要課程是麵嚮本科生的遊戲編程課程,而且已經連續教瞭10 個學期。
推薦序
當瀚陽讓我為他的譯作作序的時候,我還是有些吃驚的。我並非業界名人,雖然在遊戲行業摸爬滾打瞭十幾年,但並沒有多少建樹,為瞭配得上譯者所散發齣的光芒,我多少也要發掘齣自己的一些亮點。如果資曆也算亮點的話,我倒是有些的。1993 年我有瞭自己的*一颱電腦,那時的電腦還處於386 的時代,硬盤不過200MB,內存不過4MB,用著5 英寸的軟驅,光驅還在萌芽狀態。當時我一心想做遊戲,玩著《Wolf3D》、《Doom》,仰望著id So�� 的成就。2001 年我終於如願進入瞭遊戲行業,有幸趕上瞭西山居《月影傳說》的後期開發。之後在三大遊戲公司轉瞭一圈,如今沉浮於手機遊戲開發的大潮中。其間也曾參與瞭兩款3D引擎的早期開發工作,其中的成果已融閤在兩三款早已上市的遊戲當中。我參與程度*深,也算稍微有點名氣的遊戲就是《鬥戰神》瞭。
我和瀚陽相識緣於我們現在共同參與的這個項目,我是項目的*一個客戶端程序員,瀚陽是第二個。當項目還隻有我一個前颱程序員的時候,我一個人要麵對十幾個美工産齣的資源和四五個策劃提齣的需求,真是壓力很大。瀚陽的加入仿佛給項目增加瞭第二颱引擎,各種架構迅速完善起來,功能也越來越完整,項目順利度過瞭Demo 期,得以立項。瀚陽在遊戲開發方麵涉獵廣泛,精通多種語言,做過端遊,寫過手遊,參與過3D 引擎開發。遊戲開發之外瀚陽也有著廣泛的興趣,他的博客就是自己搭建的,跑在租用的服務器上,可以稱得上是全棧程序員。遊戲行業加班是齣瞭名的,對於瀚陽能在繁忙的工作之餘抽齣時間來翻譯這本書,我是十分佩服的,每一個程序員都不應該局限於自己所在的公司與工作,而應該在更廣闊的空間拓展自己的職業生涯。
最後迴到本書。如果你想進入遊戲開發行業,或者對於遊戲開發你已經入門但還缺乏一個全麵的瞭解,本書可以作為不錯的入門書籍。本書讀起來不會那麼纍,能夠使你快速瞭解遊戲開發所涉及的眾多領域,建立一個較為全麵的認識。在此之後你可以針對感興趣的方麵購買學習更加深入的書籍。
騰訊互娛前颱程序技術指導
陳鵬
目錄
第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
譯者序
我與本書的一些緣分
我自己是多年的玩傢瞭。在中學時期就暗自下定決心,一定要做遊戲。於是不顧反對,大學選擇瞭遊戲專業,後來通過一套類似XNA 的框架進行開發,在學習的過程中一邊寫遊戲,一邊擴展框架。從最初的使用DirectX 繪製2D 精靈開發俄羅斯方塊,到寫3D 骨骼濛皮動畫做3D 射擊遊戲,慢慢地學會瞭很多技術,比如AI、網絡、物理、腳本等。這些知識是“成長”起來的,於是每學到一點新技術都可以往裏麵塞,逐漸地形成瞭自己係統的理解。
雕爺有一篇文章說的好,臨摹是最好的學習方法。因為臨摹不僅需要你拆解分析對象作為輸入,還需要以自己的理解作為輸齣。這種帶著主動思考的輸入/輸齣,無形中就對臨摹對象有瞭深刻的理解,這不是走馬觀花那種被動的學習效率能比擬的。這種經過充分思考的練習,最能夠將知識“內化”,而隻有站在前人的基礎之上,創新纔會比較靠譜。在我看來,本書的內容,屬於手把手地對各種GamePlay 拆解,然後實現,讓知識一點一點地成長起來。更加難得的是,因為作者從業界轉嚮瞭教育界,所以本書不僅內容上係統全麵,而且語言上簡單清晰,讓人易於理解。
興趣是最好的老師,GamePlay 不像操作係統、渲染引擎、物理引擎那麼“枯燥”,本書可以很輕鬆就讀完。初學者完全可以從GamePlay 入手,在XNA 框架上實現書中的內容,然後在深入的過程中補全遊戲開發中各個係統的知識。而有經驗者也可以從本書中補全對遊戲軟件的係統理解,比如一開始作者就闡明瞭遊戲程序的三要素:遊戲時間、遊戲對象、遊戲循環,還有一些有意思的訣竅,比如用xyzzy 口訣記住叉乘運算,也有一些案例分析——《魔獸世界》的UI 插件係統,以及工作中的教訓——《指環王》中音頻引擎的設置。
除此之外,本書還提供瞭專業方嚮上的參考資料,讓讀者在感興趣的話題上深入學習。每章都會提齣關鍵問題並列齣有深度的參考資料,這些資料大部分是行業經典,比如像《遊戲引擎架構》、Real-Time Rendering 這樣的神作當然沒有錯過。
遊戲行業是一個很有意思、充滿朝氣的行業,有很多真正熱愛遊戲的人。當然,同時有很多問題,但這何嘗不是機會呢?
劉瀚陽
郵箱:lauhonyeung@gmail.com
博客:jjyy.guru
推薦序
當瀚陽讓我為他的譯作作序的時候,我還是有些吃驚的。我並非業界名人,雖然在遊戲行業摸爬滾打瞭十幾年,但並沒有多少建樹,為瞭配得上譯者所散發齣的光芒,我多少也要發掘齣自己的一些亮點。如果資曆也算亮點的話,我倒是有些的。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 這樣的神作當然沒有錯過。
遊戲行業是一個很有意思、充滿朝氣的行業,有很多真正熱愛遊戲 遊戲編程算法與技巧 下載 mobi epub pdf txt 電子書 格式
遊戲編程算法與技巧 下載 mobi pdf epub txt 電子書 格式 2024
遊戲編程算法與技巧 下載 mobi epub pdf 電子書這本書挺爛的,作者也名不見經傳
評分內容很豐富,效果很不錯~
評分這本書看著還可以的樣子
評分一本不錯的書,買來慢慢看
評分不錯,送的很快給好評
評分講的比較多,但是不太深入,簡單涉獵下知識網吧
評分書還沒看,看上去挺好的
評分遊戲開發 瞭解。。。
評分書不厚,大部分都是基礎,適閤遊戲開發入門學習
遊戲編程算法與技巧 mobi epub pdf txt 電子書 格式下載 2024