遊戲編程算法與技巧 Game Programming Algorithms and Techniques
http://gamealgorithms.net
第1章 遊戲編程概述
第2章 2D圖形
第3章 遊戲中的線性代數
第4章 3D圖形
第5章 遊戲輸入
第6章 聲音
第7章 物理
第8章 攝像機
第9章 人工智能
第10章 用戶界面
第11章 腳本語言和數據格式
第12章 網絡遊戲
第13章 遊戲示例:橫向滾屏者(iOS)
第14章 遊戲示例:塔防(PC/Mac)
第1章 遊戲編程概述
遊戲編程的發展
世界上第一款商業遊戲Computer Space在1971年推出.是後來Atari的創辦人Nolan Bushnell 和 Ted Dabney 開發的.這款遊戲當時並不是運行在傳統計算機上的.它的硬件甚至沒有處理器和內存.它只是一個簡單的狀態機,在多個狀態中轉換.Computer Space的所有邏輯必須在硬件上完成.
隨著"Atari 2600"在1977年推出,開發者們有了一個開發遊戲的平臺.這正是遊戲開發變得更加軟件化的時候,再也不用設計復雜的硬件了.從Atari時期一直到現在,仍然有一些遊戲技術保留著
家用機推出的時候,它的硬件就會被鎖定5年多,稱為一個"世代".家用機的優點也在於其鎖定了硬件,使得程序員可以有效利用機能.
Atari時期(1977-1985年)
這個時期的程序員需要對底層硬件有一定的理解.CPU運行在1.1MHz,內存只有128字節.這些限制使得用C語言開發不太實際.大多數遊戲都是完全用匯編語言開發的. 更糟糕的是,調試是完全看個人能力的.沒有任何開發工具和SDK.
NES和SNES時期(1985-1995年)
然而到了1983年,北美遊戲市場崩潰了.主要原因在於,市場上充斥著大量質量低下的遊戲.
直到1985年推出的紅白機(NES)才把產業帶回正軌.
到了超級任天堂(SNES)時代,開發團隊進一步擴大.隨著開發團隊的擴大,不可避免地會變得更加專業化.
NES和SNES的遊戲仍然完全用匯編語言開發,因為內存依然不足.幸運的是任天堂有提供SDK和開發工具,開發者不再像Atari時期那麽痛苦.
PS和PS2時期(1995-2005年)
Xbox360,PS3和Wii時期(2005-2013年)
遊戲的未來
盡管遊戲開發多年來有許多變遷,有趣的是,許多早期概念到現在仍然適用,20年都沒變的核心概念的基礎部分: 遊戲循環, 遊戲時間管理和遊戲對象模型
遊戲循環
整個遊戲程序的核心流程控制稱為遊戲循環.之所以是一個循環,是因為遊戲總是不斷地執行一系列動作直到玩家退出.每叠代一次遊戲循環稱為1幀.大部分實時遊戲每秒鐘更新30~60幀.如果一個遊戲跑60FPS(幀/秒),那麽這個遊戲循環每秒要執行60次.
遊戲開發中有著各種各樣的遊戲循環,選擇上需要考慮許多因素,其中以硬件因素為主
傳統的遊戲循環
多線程下的遊戲循環
時間和遊戲
真實時間和遊戲時間
通過處理時間增量來表示遊戲邏輯
遊戲對象
遊戲對象的模型
遊戲循環中的遊戲對象
相關資料
遊戲編程的發展
遊戲循環
遊戲對象
第2章 2D圖形
2D渲染基礎
CRT顯示器基礎
像素緩沖區和垂直同步
精靈
繪制精靈
動畫精靈
精靈表單
滾屏
單軸滾屏
無限滾屏
平行滾屏
四向滾屏
磚塊地圖
簡單的磚塊地圖
斜視等視角磚塊地圖
相關資料
Cocos2D
SDL
第3章 遊戲中的線性代數
向量
加法
減法
長度,單位向量和正規化
標量乘積
點乘
問題舉例:向量反射
叉乘
問題舉例:旋轉一個2D角色
線性插值
坐標系
矩陣
加法/減法
標量乘法
乘法
逆矩陣
轉置
用矩陣變換3D向量
相關資料
第4章 3D圖形
基礎
多邊形
坐標系
模型坐標系
世界坐標系
視角/攝像機坐標系
投影坐標系
光照與著色
顏色
頂點屬性
光照
Phong光照模型
著色
可見性
再探畫家算法
深度緩沖區
再探世界變換
四元數
3D遊戲對象的表示
相關資料
第5章 遊戲輸入
輸入設備
數字輸入
模擬輸入
基於事件的輸入系統
基礎事件系統
一個更復雜的系統
移動設備輸入
觸屏和手勢
加速器和陀螺儀
其他移動設備輸入
相關資料
第6章 聲音
基本聲音
原始數據
聲音事件
3D聲音
監聽者和發射者
衰減
環繞聲
數字信號處理
常見數字信號處理效果
區域標記
其他聲音話題
多普勒效應
聲音遮擋
相關資料
第7章 物理
平面,射線和線段
平面
射線和線段
碰撞幾何體
包圍球
軸對齊包圍盒
朝向包圍盒
膠囊體
凸多邊形
組合碰撞集合體
碰撞檢測
球與球的交叉
AABB與AABB交叉
線段與平面交叉
線段與三角片交叉
球與平面交叉
球形掃掠體檢測
響應碰撞
優化碰撞
基於物理的移動
線性力學概覽
可變時間步長帶來的問題
力的計算
歐拉和半隱式歐拉積分
Verlet積分法
其他積分方法
角力學
相關資料
第8章 攝像機
攝像機的類型
固定攝像機
第一人稱攝像機
跟隨攝像機
場景切換攝像機
透視投影
視場
寬高比
攝像機的實現
基礎的跟隨攝像機
彈性跟隨攝像機
旋轉攝像機
第一人稱攝像機
樣條攝像機
攝像機支持算法
攝像機碰撞
揀選
相關資料
第9章 人工智能
"真"AI與遊戲AI
尋路
探索空間的表示
可接受的啟發式算法
貪婪最佳優先算法
A*尋路
Dijkstra算法
基於狀態的行為
AI的狀態機
基礎的狀態機實現
狀態機設計模式
策略和計劃
策略
計劃
相關資料
通用AI
尋路
狀態
第10章 用戶界面
菜單系統
菜單棧
按鈕
打字
HUD元素
路點箭頭
準心
雷達
其他需要考慮的UI問題
支持多套分辨率
本地化
UI中間件
用戶體驗
相關資料
第11章 腳本語言和數據格式
腳本語言
折中
腳本語言的類型
Lua
UnrealScript
可視化腳本系統
實現一門腳本語言
標記化
正則表達式
語法分析
代碼的執行和生成
數據格式
折中
二進制格式
INI
XML
JSON
案例學習:<<魔獸世界>>中的UI Mod
布局和事件
行為
問題:玩家自動操作
問題:UI兼容性
結論
相關資料
第12章 網絡遊戲
協議
IP
ICMP
TCP
UPD
網絡拓撲
服務器/客戶端
點對點
作弊
信息作弊
遊戲狀態作弊
中間人攻擊
相關資料
第13章 遊戲示例:橫向滾屏者(iOS)
概覽
Objective-C
Cocos2D
代碼分析
AppDelegate
MainMenuLayer
GameplayScene
ScrollingLayer
Ship
Projectile
Enemy
ObjectLayer
第14章 遊戲示例:塔防(PC/Mac)
概覽
C#
XNA
MonoGame
代碼分析
設置
單件
遊戲類
遊戲狀態
遊戲對象
關卡
計時器
尋路
攝像機和投影
輸入
物理
本地化
圖形
聲音
用戶界面
遊戲編程算法與技巧 Game Programming Algorithms and Techniques