新聞中心
我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析計算機圖形學,OpenGL ES及游戲引擎架構,全面提升游戲開發(fā)相關知識)
秦春林 著
ISBN 978-7-121-24625-8
2014年11月出版
定價:79.00元
404頁
16開
內(nèi)容提要
《我所理解的Cocos2d-x》針對最新的 Cocos2d-x3.x版本,介紹了Coco2d-x游戲引擎的基本架構、渲染機制,以及各個子模塊的功能和原理,并結合OpenGL ES圖形渲染管線,深入探討了游戲開發(fā)中涉及的相關圖形學的知識,內(nèi)容包括:Cocos2d-x的基本架構及渲染機制、紋理相關的知識、OpenGL ES 2.0渲染管線、計算機字體的繪制、多分辨率支持、事件分發(fā)、碰撞與物理引擎、游戲對象模型架構、Genius-x開源框架、腳本在游戲引擎中的架構等?!段宜斫獾腃ocos2d-x》偏重講解每個知識模塊的概念及原理,使讀者能夠透過現(xiàn)象看到其背后的工作機制,所以本書在內(nèi)容組織上并不是圍繞Cocos2d-x的接口使用來展開,而是按照通用游戲引擎架構及圖形學的內(nèi)容進行組織。
《我所理解的Cocos2d-x》面向中、高級開發(fā)者,可作為初級開發(fā)者進階的教程,也可作為高校游戲引擎架構及圖形學相關專業(yè)的參考教材。
目錄
第1章 全新的Cocos2d-x 3.0
1.1 Cocos2d-x 3.0的歷史意義
1.1.1 回歸C++風格
1.1.2 更靈活的渲染架構
1.1.3 更自由的發(fā)展
1.2 Cocos2d-x 3.0的新特性
1.2.1 使用C++風格
1.2.2 跨平臺的Label
1.2.3 新的渲染系統(tǒng)
1.2.4 統(tǒng)一的消息分發(fā)
1.2.5 物理引擎集成
1.2.6 新的數(shù)據(jù)結構
1.2.7 其他
1.3 Cocos2d-x引擎展望
1.3.1 3D
1.3.2 Cocos Code IDE
1.4 本章小結
第2章 Cocos2d-x架構一瞥
2.1 Cocos2d-x引擎系統(tǒng)總覽
2.2 Cocos2d-x內(nèi)存管理機制
2.2.1 C++顯式堆內(nèi)存管理
2.2.2 C++ 11中的智能指針
2.2.3 為什么不使用智能指針
2.2.4 垃圾回收機制
2.2.5 Cocos2d-x內(nèi)存管理機制
2.2.6 Cocos2d-x中的智能指針
2.2.7 怎樣進行內(nèi)存管理
2.3 UI樹及運行時游戲對象
2.3.1 位置與變換
2.3.2 坐標系
2.3.3 UI樹
2.3.4 UI元素與內(nèi)存管理
2.4 應用程序架構
2.4.1 游戲生命周期
2.4.2 窗口尺寸
2.4.3 場景管理
2.4.4 游戲循環(huán)
2.5 實時更新游戲對象
2.5.1 幀率
2.5.2 Scheduler
2.5.3 時間線
2.5.4 邏輯更新優(yōu)先級
2.5.5 性能問題
2.6 Cocos2d-x的主線程
2.6.1 在主線程中執(zhí)行異步處理
2.6.2 紋理的異步加載
2.6.3 異步處理的單元測試
2.7 本章小結
第3章 OpenGL ES 2.0概覽
3.1 圖形處理器簡介
3.2 什么是OpenGL ES
3.3 OpenGL ES 2.0渲染管線
3.3.1 頂點數(shù)組
3.3.2 頂點著色器
3.3.3 圖元裝配
3.3.4 光柵化
3.3.5 片段著色器
3.3.6 片段測試
3.4 渲染管線中的并行計算
3.5 構建高性能的渲染引擎
3.6 幀緩沖
3.7 本章小結
第4章 全新的繪制系統(tǒng)
4.1 新繪制系統(tǒng)的特點
4.2 繪制系統(tǒng)概覽
4.3 RenderCommand
4.4 RenderQueue
4.5 GroupCommand
4.6 Render
4.6.1 RenderCommand的排序
4.6.2 QuadCommand
4.7 元素的可見性
4.8 繪制的時機
4.9 示例:自定義RenderCommand
4.10 本章小結
第5章 紋理
5.1 光柵化
5.1.1 多重采樣
5.1.2 紋理坐標
5.2 像素矩形
5.2.1 像素存儲模式
5.2.2 紋理數(shù)據(jù)的傳輸
5.2.3 解包
5.3 客戶端圖像格式
5.3.1 紋理格式的對應關系
5.3.2 圖像數(shù)據(jù)格式轉換
5.4 紋理對象和加載紋理
5.5 紋理單元與多重紋理
5.6 紋理縮放
5.6.1 紋理縮小
5.6.2 紋理放大
5.6.3 在Cocos2d-x中設置過濾模式
5.7 多級紋理
5.7.1 多級紋理過濾模式
5.7.2 多級紋理的上傳
5.7.3 多級紋理的生成
5.8 紋理壓縮
5.8.1 壓縮紋理的特點
5.8.2 壓縮紋理的實現(xiàn)
5.8.3 在Cocos2d-x中使用壓縮紋理
5.8.4 PVRTC和PVRTC2
5.8.5 ETC
5.8.6 針對不同設備使用不同的壓縮紋理
5.9 紋理緩存管理
5.9.1 紋理的生命周期
5.9.2 用TextureCache來管理紋理
5.9.3 場景過渡中的資源管理
5.9.4 Android下的紋理恢復處理
5.10 紋理所占內(nèi)存的計算
5.11 使用紋理最佳實踐
5.11.1 硬件層面
5.11.2 程序層面
5.11.3 資源層面
5.12 本章小結
第6章 精靈
6.1 用Sprite繪制一個矩形區(qū)域
6.1.1 V3F_C4B_T2F_Quad結構體
6.1.2 使用QuadCommand進行繪制
6.1.3 將Sprite作為子元素
6.2 Sprite的繪制屬性
6.2.1 顏色混合
6.2.2 顏色疊加
6.3 Alpha預乘
6.4 精靈表
6.5 精靈動畫
6.6 批繪制還是自動批繪制
6.6.1 SpriteBatchNode
6.6.2 TextureAtlas
6.6.3 SpriteBatchNode的特點和限制
6.7 部分拉伸:九宮格
6.8 本章小結
第7章 OpenGL ES著色語言
7.1 概覽
7.2 基礎類型
7.2.1 空類型
7.2.2 布爾類型
7.2.3 整型
7.2.4 浮點型
7.2.5 矢量
7.2.6 矩陣
7.2.7 采樣器
7.2.8 結構體
7.2.9 數(shù)組
7.3 存儲限定符
7.3.1 默認限定符
7.3.2 常量限定符
7.3.3 屬性限定符
7.3.4 全局限定符
7.3.5 易變量限定符
7.4 構造器
7.4.1 標量的轉換構造
7.4.2 矢量和矩陣構造器
7.4.3 結構體構造器
7.5 矢量的分量
7.6 矩陣的分量
7.7 結構體和成員
7.8 矢量和矩陣操作符
7.9 本章小結
第8章 OpenGL ES著色程序
8.1 頂點和頂點數(shù)組
8.1.1 圖元與頂點
8.1.2 頂點屬性狀態(tài)
8.1.3 頂點數(shù)組
8.2 頂點緩沖對象
8.2.1 頂點數(shù)組緩沖對象
8.2.2 索引數(shù)組緩沖對象
8.2.3 使用VAO緩存頂點數(shù)組狀態(tài)
8.3 著色器程序
8.3.1 著色器程序字符串
8.3.2 著色器的加載和編譯
8.3.3 著色器程序對象
8.4 Cocos2d-x著色器子系統(tǒng)
8.4.1 GLProgram與Node之間的關系
8.4.2 GLProgramState
8.4.3 著色器程序的使用過程
8.4.4 GLProgramState的管理
8.4.5 GLProgramState的限制
8.5 頂點著色器
8.5.1 輸入?yún)?shù)
8.5.2 頂點坐標輸出參數(shù)
8.5.3 易變量輸出參數(shù)
8.6 片段著色器
8.6.1 輸入?yún)?shù)
8.6.2 紋理采樣
8.6.3 輸出參數(shù)
8.7 著色器編輯工具
8.8 示例
8.8.1 使用ETC壓縮紋理
8.8.2 動態(tài)設置著色器參數(shù)
8.9 著色器程序最佳實踐
8.10 本章小結
第9章 幀緩沖
9.1 GroupCommand
9.1.1 使用GroupCommand的流程
9.1.2 GroupCommand的限制
9.2 幀緩沖
9.2.1 綁定和管理幀緩沖
9.2.2 將圖像附加到幀緩沖
9.2.3 渲染緩沖對象
9.2.4 將Renderbuffer附加到幀緩沖
9.2.5 將Texture附加到幀緩沖
9.2.6 幀緩沖完成狀態(tài)
9.3 RenderTexture
9.3.1 RenderTexture的初始化
9.3.2 RenderTexture的繪制
9.3.3 ReadPixels
9.3.4 RenderTexture的限制及用途
9.4 本章小結
第10章 片段操作
10.1 片段操作簡述
10.2 邏輯緩沖區(qū)
10.2.1 位平面
10.2.2 按位計算
10.3 片段測試
10.3.1 模板測試
10.3.2 深度測試
10.3.3 模板測試的步驟
10.3.4 片段測試的用途
10.4 全緩沖區(qū)操作
10.4.1 控制緩沖區(qū)的更新
10.4.2 清理緩沖區(qū)
10.5 ClippingNode
10.5.1 ClippingNode的繪制流程
10.5.2 ClippingNode的模板測試分析
10.6 本章小結
第11章 多分辨率支持
11.1 概述
11.2 設計分辨率
11.2.1 縮放策略
11.2.2 調整元素位置
11.2.3 幾個有用的變量
11.2.4 使用屏幕分辨率
11.2.5 視口設置
11.2.6 什么時候縮放了
11.3 資源分辨率
11.3.1 資源分辨率的設置
11.3.2 真實分辨率InPixels
11.3.3 什么時候縮放資源
11.4 本章小結
第12章 事件分發(fā)
12.1 概述
12.1.1 什么是事件
12.1.2 事件的工作機制
12.1.3 事件系統(tǒng)的特點
12.2 訂閱者
12.2.1 事件類型
12.2.2 注冊與管理訂閱者
12.3 事件的分發(fā)
12.3.1 訂閱者的排序
12.3.2 嵌套事件
12.3.3 在事件分發(fā)中修改訂閱者
12.3.4 停止分發(fā)事件
12.4 事件與Node
12.4.1 暫停與恢復
12.4.2 刪除訂閱者
12.5 觸摸事件
12.5.1 EventListenerTouchAllAtOnce
12.5.2 EventListenerTouchOneByOne
12.5.3 單點和多點觸摸之間的關系
12.5.4 觸摸點的位置判斷
12.5.5 可見性與觸摸事件
12.6 其他
12.6.1 其他操作系統(tǒng)事件
12.6.2 EventCustom
12.6.3 內(nèi)存管理
12.6.4 回調與返回值
12.6.5 單元測試
12.6.6 其他事件
12.7 本章小結
第13章 字體的故事
13.1 計算機字體的歷史
13.2 輪廓字形概述
13.2.1 點
13.2.2 輪廓
13.2.3 輪廓的方向
13.2.4 輪廓的交叉
13.2.5 混合輪廓字形
13.2.6 字形格子
13.3 FreeType字體引擎
13.3.1 字體文件及字形索引
13.3.2 字符度量
13.3.3 FreeType字形解析過程
13.3.4 FreeType字形裝載
13.4 FontAtlas
13.4.1 Font
13.4.2 FontAtlasCache
13.5 Label
13.5.1 通用屬性
13.5.2 Font字符集
13.5.3 輪廓字體的縮放
13.5.4 特效
13.6 使用字體的最佳實踐
第14章 動畫系統(tǒng)
14.1 概述
14.2 線性插值
14.2.1 標量插值
14.2.2 矢量插值
14.2.3 變換矩陣插值
14.2.4 插值在動畫系統(tǒng)中的運用
14.3 給元素添加動畫
14.3.1 Action是一個自描述的對象
14.3.2 在Node上執(zhí)行動畫
14.3.3 控制動畫的動畫
14.4 動畫系統(tǒng)架構
14.4.1 Speed
14.4.2 緩動函數(shù)
14.4.3 自定義動畫——精靈閃白
14.5 本章小結
第15章 碰撞及物理引擎
15.1 物理引擎概述
15.2 碰撞檢測系統(tǒng)
15.2.1 剛體
15.2.2 接觸和碰撞
15.2.3 碰撞查詢
15.3 剛體動力學
15.3.1 控制剛體的運動
15.3.2 碰撞響應
15.3.3 約束
15.4 整合物理引擎
15.4.1 剛體與可視對象
15.4.2 物理世界
15.4.3 游戲循環(huán)階段
15.5 預處理與工具
15.6 本章小結
第16章 運行時游戲對象模型
16.1 概述
16.2 運行時游戲對象模型
16.2.1 以對象為中心的架構
16.2.2 組件模型
16.2.3 以屬性為中心的架構
16.3 Entity Component System
16.3.1 屬性結構
16.3.2 分離數(shù)據(jù)與行為
16.3.3 數(shù)據(jù)驅動
16.4 對象查詢與消息通信
16.4.1 根據(jù)唯一標識符查詢
16.4.2 根據(jù)類型查詢
16.4.3 面向類型編程
16.4.4 游戲對象數(shù)據(jù)庫
16.5 實時更新游戲對象
16.5.1 更新的性能優(yōu)化
16.5.2 更新的時序
16.6 本章小結
第17章 Genius-x開源框架
17.1 Genius-x是什么
17.1.1 Genius-x架構一覽
17.1.2 Genius-x項目結構及使用
17.2 游戲對象模型
17.2.1 Entity
17.2.2 Component
17.2.3 System
17.2.4 ECSManager
17.2.5 數(shù)據(jù)驅動
17.2.6 NodeCom
17.2.7 對象的層級結構
17.3 數(shù)據(jù)格式、加載及串流
17.3.1 數(shù)據(jù)格式
17.3.2 文件加載和管理
17.3.3 游戲世界的串流
17.4 游戲通用系統(tǒng)
17.5 共享組件
17.6 示例
第18章 腳本
18.1 腳本的概念
18.1.1 腳本語言的特征
18.1.2 Lua腳本語言
18.1.3 腳本所需的架構
18.2 運行時腳本語言的功能
18.2.1 對原生編程語言的接口
18.2.2 游戲對象句柄
18.2.3 在腳本中接收及處理事件
18.2.4 發(fā)送事件
18.2.5 面向對象腳本語言
18.3 Lua bindings
18.3.1 生成綁定代碼
18.3.2 在程序中使用綁定代碼
18.3.3 自定義綁定
18.4 在Lua中使用Genius-x
18.4.1 配置環(huán)境
18.4.2 創(chuàng)建Component腳本
18.4.3 創(chuàng)建System腳本
18.4.4 其他接口
18.5 本章小結
精彩節(jié)摘
第16章 運行時游戲對象模型
到目前為止,我們討論的所有內(nèi)容都可以稱之為低階引擎系統(tǒng),例如Renderer如何將網(wǎng)格繪制到屏幕上,紋理如何被使用,字體如何被繪制,如何從人體學接口設備獲取玩家輸入信息,如何處理物體的碰撞,以及如何對物體執(zhí)行動畫等。這些幾乎都是和游戲性無關的一些基礎功能。
當開始設計游戲的時候,開發(fā)者面對的往往是一個更上層的,可以稱之為游戲性(Gameplay)基礎系統(tǒng)的高階引擎系統(tǒng),例如怎樣表示游戲中的對象,怎樣組織它們的行為和狀態(tài),設計師怎樣通過數(shù)據(jù)驅動來快速修改關卡及游戲配置,怎樣高效有序地組織游戲對象之間的邏輯更新等。這些筆者稱之為游戲性架構(Gameplay Architecture),或者很多開發(fā)者稱之為游戲架構。理論上,游戲性架構的一些理論和實踐甚至可以和游戲引擎無關。
當然,游戲性架構其實涉及很多內(nèi)容,例如它可以包括運行時游戲對象模型、關卡及串流、實時更新游戲對象模型、事件分發(fā)及腳本系統(tǒng)等。本章將會聚焦于運行時游戲對象模型,講述常見的幾種游戲對象設計的概念、方式及優(yōu)缺點。
16.1 概述
在所有游戲性架構相關的內(nèi)容中,運行時游戲對象模型可能是最復雜的系統(tǒng),并且不同的游戲引擎呈現(xiàn)出的差異極大。例如Unity3D提供的組件模型,虛幻引擎提供的面向對象繼承的模型,其他一些游戲例如《末日危城(Dungeon Siege)》則使用一種不同于兩者的基于數(shù)據(jù)驅動的游戲對象模型。
這些不同的游戲對象模型之間呈現(xiàn)出很大的設計思維及使用上的差異,但是它們往往都提供或者必須具備一些通用的功能,這些包括但不限于:
(1)管理游戲對象的創(chuàng)建及銷毀。游戲中經(jīng)常會動態(tài)創(chuàng)建各種游戲對象,例如一個塔防游戲會定時出現(xiàn)一些小怪物,***在撞擊到目標時立即被銷毀等。許多游戲引擎都提供一種統(tǒng)一的動態(tài)創(chuàng)建、銷毀游戲對象的方式,并管理游戲對象的內(nèi)存及資源,例如第17章即將講述的Genius-x框架中使用createEntity()、removeEntity(entity)來動態(tài)創(chuàng)建和銷毀一個游戲對象。但是在Cocos2d-x中卻不是通過統(tǒng)一的方式創(chuàng)建和銷毀游戲對象,它使用每個Node子類自己的構造函數(shù)來創(chuàng)建,并使用一種特殊的方式管理內(nèi)存(參見第2章)。
(2)聯(lián)系底層游戲引擎。每個游戲對象要能夠通過某種方式訪問底層的游戲引擎系統(tǒng),例如能夠渲染三角形網(wǎng)格、執(zhí)行碰撞檢測,對角色執(zhí)行動畫等。在Unity3D引擎中,每個游戲對象(GameObject)可以通過添加一個與底層引擎功能相關的組件(Componment)來訪問底層引擎系統(tǒng)。Cocos2d-x的Node類則直接集成了物理模擬、動畫、實時邏輯更新等接口。
(3)實時模擬對象行為。游戲是一個高度實時的系統(tǒng),游戲對象的狀態(tài)、行為在每一幀都可能會隨著時間發(fā)生變化,這需要一套高效的游戲對象更新機制。對象可能需要以特定的邏輯次序進行更新。此外,除了邏輯次序,游戲對象之間還可能存在依賴關系,需要按照一定的次序更新(關于游戲對象更新的次序會在本章后面講述)。
(4)定義新游戲對象類型。在開發(fā)過程中,隨著游戲需求的改變和演進,游戲對象模型必須有足夠的彈性,可以容易地加入新的對象類型。理想情況下,新的游戲類型應可以完全用數(shù)據(jù)驅動的方式定義,但是在實際情況中,大部分新增游戲類型都需要程序員的參與。在Genius-x框架中,新的不同行為的組合類型可以通過修改數(shù)據(jù)文件來實現(xiàn),而新的行為則可以通過腳本來實現(xiàn),然后修改數(shù)據(jù)文件來添加新的行為。
(5)唯一的對象標識符。游戲世界可能會包含成百上千的游戲對象,在運行時必須能夠識別和找到想要的對象,這意味著每種對象需要有某種唯一標識符。例如在Cocos2d-x 中可以通過給一個Node指定一個字符串名稱,然后通過字符串標識符查找一個游戲對象。
(6)游戲對象查詢。除了上面按游戲唯一標識符查詢游戲對象,游戲性系統(tǒng)還需要一些更高級的查詢方式,例如找到某種類型的游戲對象,或者某個范圍的敵人等。在面向組件或者屬性的架構中,游戲對象是以組件/屬性為單位存儲的,很容易查找具有某個屬性類型的游戲對象組合,并且這種查找游戲對象的方式對數(shù)據(jù)驅動更友好,筆者稱之為面向類型編程。
除了上述提到的這些,運行時游戲對象模型還包括有限狀態(tài)機,用于同一個網(wǎng)絡內(nèi)的對象復制、對象序列化和持久性存檔等。
作者簡介
秦春林:自大學開始自學編程,先后從事過工作流軟件,云計算,Web等相關的工作。2011年開始進入游戲開發(fā)領域,主持并移植了Cocos2d-x-for-XNA項目。喜歡技術分享,發(fā)起并組織了北京快樂技術沙龍,多次作為講師參與微軟,CSDN,51CTO以及9RIA等組織的各類技術培訓和講座。參與了手游項目《天降》的開發(fā),目前主要的興趣方向是計算機圖形學和游戲引擎架構,致力于用軟件技術豐富游戲世界的表現(xiàn)及品質。
媒體評論
2014年,對于Cocos2d-x可以說是具有里程碑意義的一年:3.x大版本更新、向3D領域正式進軍、北大/浙大等重點高校開課、與ARM/微軟/Intel巨頭深入合作、在日本等市場實現(xiàn)后進者逆襲……引擎團隊的不懈努力得到了豐厚的回報。
Cocos2d-x 3.0版本的這一次飛躍主要實現(xiàn)了三大優(yōu)化:一是新的渲染器,可創(chuàng)建渲染隊列,可簡單地實現(xiàn)批量渲染,跨平臺也非常容易;二是新修改過的API,將語言用法改為C++程序員更習慣的使用方式,穩(wěn)定性與可讀性得到提升;三是性能再次提升優(yōu)化,利用自動裁剪、自動批處理技術,性能得到很大提升,兼容性方面在中國安卓平臺上也做到非常好用。
在版本跟進方面,秦春林的速度是最快的?,F(xiàn)在你看到的這本《我所理解的Cocos2d-x》是國內(nèi)第一本直接從Cocos2d-x3.0版本入手的書籍,直接從更高的起點起步,可以說是國內(nèi)最新。
本書由淺入深,共分18個章節(jié),從Cocos2d-x 3.0及架構開始,逐塊剖析引擎的各個特性,同時搭配OpenGL ES的相關使用。在最后一章,秦春林還介紹了他自己基于組件架構模型寫的開源框架,可以說是一本很好的Cocos2d-x高階書籍,值得一讀。
另外,秦春林的團隊“魂世界”采用Cocos2d-x開發(fā)的作品《天降》在今年也取得了非常好的成績,已被樂逗游戲以2000萬元的高價代理,是一款很酷的電競手游。我本人非常期待,希望這款Cocos2d-x游戲能夠取得更好的成績。
最后,祝秦春林的書本大賣、游戲火爆,也祝更多的團隊能夠從Cocos引擎中受益。
Cocos2d-x游戲引擎作者
王哲
前言
我與Cocos2d-x結緣于2011年,那個時候我所在的公司OpenXLive與Cocos2d-x團隊合作移植Cocos2d-x游戲引擎到WP7平臺,它采用C#語言基于XNA來實現(xiàn),我是該項目的負責人。然而不久,微軟就用支持C++原生語言的WP8替代了WP7,該項目也逐漸被開發(fā)者淡忘。沒想到三年后我卻會為Cocos2d-x寫一本書,這三年,我和Cocos2d-x都在成長。
開源是我認為軟件最富魅力的部分,它給予我們閱讀和修改源代碼的自由。開源對人類和科技進步的貢獻是巨大的,如今,大多數(shù)軟件系統(tǒng)都有著各種各樣開源軟件的影子。開源代碼對技術人員的成長有著難以估量的價值,例如,沒有開源的Cocos2d-x,我就難以寫出本書中的很多內(nèi)容。
本書定位為一本進階的書籍,它著重于講述Cocos2d-x引擎各個功能及組件背后的實現(xiàn)原理。因此,本書并沒有嚴格按照Cocos2d-x引擎本身的功能展開描述,而是從這些功能中抽象出一些設計或者架構層面的內(nèi)容進行討論。例如本書沒有分別講述精靈、地圖、粒子特效等的接口使用,而是從紋理、渲染方式等多個方面來講述這些元素背后的工作機制;而OpenGL ES、物理引擎和腳本等內(nèi)容也幾乎是可以脫離于Cocos2d-x進行學習和理解的。
這就是本書標題的來源,也是本書與同類書籍在內(nèi)容編排上的大不同。我希望寫一本書,它可以讓讀者站在一個系統(tǒng)性的高度對游戲引擎的一些架構設計及實現(xiàn)進行理解,從而不但提升和擴充自己的知識結構,更能夠在實際開發(fā)中去靈活解決各個層面的技術問題。本書同時追求系統(tǒng)性和實踐性的平衡,例如對于紋理部分,除了總結紋理相關的所有知識,也通過一些示例來演示它在各個層面的具體使用。
本書共分18章。
第1~4章介紹了Cocos2d-x引擎的基本架構及新的繪制系統(tǒng)。這部分內(nèi)容包括:Cocos2d-x的內(nèi)存管理機制,UI樹的遍歷及結構,應用程序的生命周期,游戲循環(huán)的各個階段,以及在Cocos2d-x中驅動各個子系統(tǒng)進行邏輯更新的機制和工作原理。這部分也介紹了Cocos2d-x 3.x新的數(shù)據(jù)結構,并詳細描述了新的渲染系統(tǒng)??傊?,在這一部分,讀者可以對Cocos2d-x的基本架構有比較系統(tǒng)的了解。
第5~10章圍繞OpenGL ES圖形渲染管線進行介紹。這部分從紋理講起,詳細講述了紋理的存儲格式、傳輸、縮放、壓縮及多重紋理等相關知識;第8章詳細講述了頂點數(shù)組的結構、頂點屬性的綁定及傳輸、著色器程序的編譯及鏈接,以及Cocos2d-x新的著色器子系統(tǒng),并舉例在Cocos2d-x中使用著色器的流程和怎樣使用多重紋理。這部分也對頂點著色器和片段著色器兩個階段在圖形渲染管線中的作用進行了詳細描述。
第9、10章講述了OpenGL ES圖形渲染管線的最后兩個階段:幀緩沖和片段操作,并以Cocos2d-x中對這兩個階段的應用RenderTexture和ClippingNode為例進行講解。這樣,讀者將對整個渲染管線的每一個階段都能有所了解,并且能夠結合Cocos2d-x中的使用去思考每一個階段的意義和作用,從而對圖形渲染管線有更深刻的了解。這也是本書最具特色的部分。
第10~15章講述了Cocos2d-x的一些子系統(tǒng),包括事件分發(fā)、多分辨率支持、動畫系統(tǒng)及物理引擎整合。其中物理引擎部分也是我比較喜歡的章節(jié),這部分講述了一些通用的物理引擎的架構及其使用,以及怎樣和游戲引擎進行整合。
第16~18章探討應該怎樣去設計和管理游戲世界中的對象。第16章講述了常見的對象模型、組件模型、屬性模型之間的概念、區(qū)別及優(yōu)缺點;第17章則以屬性模型為例,講述了一個游戲對象模型應該怎樣設計;第18章探討了時下最流行的腳本相關的內(nèi)容,但是與僅僅討論腳本使用不同的是,我們站在一個游戲引擎的高度去討論腳本的架構,這樣讀者甚至能設計自己的腳本模型。這一部分內(nèi)容具有對前端架構設計的高度總結性與實踐性,不管是對經(jīng)驗豐富的讀者還是初學者,相信都具有一定的啟發(fā)性。
另外,本書在寫作之初并沒有構建出整本書的內(nèi)容結構,在寫前面的章節(jié)時我甚至不知道最后幾章的內(nèi)容和結構會是怎樣的。在開始寫每一章的時候,我不會首先去給自己描繪一個目錄結構,而是首先把所有相關的內(nèi)容列出來,如果之中有我不熟悉的內(nèi)容,或者有Cocos2d-x以外的一些知識,我則會首先停下寫作去把這些內(nèi)容整理出來。例如關于ECS部分的內(nèi)容就是基于Cocos2d-x社區(qū)的一些討論,我花了很多時間去學習和理解。當最后所有相關的內(nèi)容整理為一個列表時,我就知道該怎么去寫作這部分的內(nèi)容。因此,在這本書的目錄結構中,讀者找不到任何同類書籍類似的內(nèi)容結構,因為這完全是基于個人的理解及知識結構體系去寫作的一本書。
所以,對我而言這本書還有一個有意義的目標,我希望透過這樣的方式去探討一種系統(tǒng)性的學習方法。當你開始學習某個知識點時,不要把自己限定在該知識點處,而是首先從該知識點進行適當?shù)臄U展,列出該知識點相關的所有內(nèi)容,再逐個深入學習和研究細節(jié),最后反過來整理該知識點的結構體系。這樣不僅能夠更深入地學習該知識點,還能夠延伸知識的廣度,所以本書有大量超出Cocos2d-x以外的內(nèi)容,這些內(nèi)容又是與Cocos2d-x緊密相關的。希望讀者在閱讀過程中能夠感受到這樣一種寫作風格和方法。
本書是一本進階類書籍,閱讀本書,你需要對Cocos2d-x和C++有基本的了解。如果你是一名新手,可以首先閱讀同類書籍中相對比較入門的書籍,否則本書的一些章節(jié)可能會給你造成一定的困惑。
學習知識最好的方法永遠是多讀幾遍,書中關于OpenGL ES和游戲對象模型部分的內(nèi)容可能需要多讀幾次才能更加深入地理解相關的概念。當然,如果你在閱讀過程中遇到什么障礙,隨時可以通過電子郵件或者我的博客等多種方式和我進行探討。
本書可以作為Cocos2d-x開發(fā)學習的書籍,也可以作為單獨的OpenGLES相關的教材,游戲對象模型部分的內(nèi)容也可以作為設計游戲引擎架構的參考資料。本書也可以作為高校游戲及圖形學相關專業(yè)的參考教程。
最后,由于個人經(jīng)驗有限、思維有限,書中難免會出現(xiàn)一些錯誤和疏漏。真誠地希望讀者可以將這些錯誤的地方反饋給出版社,我們會及時地列出勘誤,以幫助更多的讀者更好地學習。
秦春林
2014年7月25日
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文題目:我所理解的Cocos2d-x-創(chuàng)新互聯(lián)
本文URL:http://www.dlmjj.cn/article/gehis.html