我所理解的Cocos2d-x pdf

圖書網
圖書網
圖書網
10026
文章
1334
評論
2020年4月10日23:06:12 評論 14
摘要

《我所理解的Cocos2d-x》完全基于Cocos2d-x3.0,深度剖析計算機圖形學,OpenGLES及游戲引擎架構,全面提升游戲開發相關知識。

我所理解的Cocos2d-x 作者:秦春林

我所理解的Cocos2d-x 出版社:電子工業出版社

我所理解的Cocos2d-x 內容簡介

《我所理解的Cocos2d-x》針對較新的 Cocos2d-x 3.x版本,介紹了Coco2d-x游戲引擎的基本架構、渲染機制,以及各個子模塊的功能和原理,并結合OpenGL ES圖形渲染管線,深入探討了游戲開發中涉及的相關圖形學的知識,內容包括:Cocos2d-x的基本架構及渲染機制、紋理相關的知識、OpenGL ES 2.0渲染管線、計算機字體的繪制、多分辨率支持、事件分發、碰撞與物理引擎、游戲對象模型架構、Genius-x開源框架、腳本在游戲引擎中的架構等。《我所理解的Cocos2d-x》偏重講解每個知識模塊的概念及原理,使讀者能夠透過現象看到其背后的工作機制,所以本書在內容組織上并不是圍繞Cocos2d-x的接口使用來展開,而是按照通用游戲引擎架構及圖形學的內容進行組織。

香蕉小视频app《我所理解的Cocos2d-x》面向中、高級開發者,可作為初級開發者進階的教程,也可作為高校游戲引擎架構及圖形學相關專業的參考教材。

我所理解的Cocos2d-x 目錄

第1章 全新的Cocos2d-x 3.0

1.1 Cocos2d-x 3.0的歷史意義

1.1.1 回歸C++風格

香蕉小视频app1.1.2 更靈活的渲染架構

香蕉小视频app1.1.3 更自由的發展

1.2 Cocos2d-x 3.0的新特性

1.2.1 使用C++風格

香蕉小视频app1.2.2 跨平臺的Label

1.2.3 新的渲染系統

1.2.4 統一的消息分發

香蕉小视频app1.2.5 物理引擎集成

1.2.6 新的數據結構

1.2.7 其他

香蕉小视频app1.3 Cocos2d-x引擎展望

1.3.1 3D

1.3.2 Cocos Code IDE

1.4 本章小結

第2章 Cocos2d-x架構一瞥

香蕉小视频app2.1 Cocos2d-x引擎系統總覽

2.2 Cocos2d-x內存管理機制

2.2.1 C++顯式堆內存管理

2.2.2 C++ 11中的智能指針

2.2.3 為什么不使用智能指針

香蕉小视频app2.2.4 垃圾回收機制

2.2.5 Cocos2d-x內存管理機制

2.2.6 Cocos2d-x中的智能指針

2.2.7 怎樣進行內存管理

2.3 UI樹及運行時游戲對象

2.3.1 位置與變換

2.3.2 坐標系

2.3.3 UI樹

2.3.4 UI元素與內存管理

2.4 應用程序架構

香蕉小视频app2.4.1 游戲生命周期

2.4.2 窗口尺寸

2.4.3 場景管理

2.4.4 游戲循環

香蕉小视频app2.5 實時更新游戲對象

2.5.1 幀率

2.5.2 Scheduler

2.5.3 時間線

2.5.4 邏輯更新優先級

2.5.5 性能問題

2.6 Cocos2d-x的主線程

香蕉小视频app2.6.1 在主線程中執行異步處理

2.6.2 紋理的異步加載

香蕉小视频app2.6.3 異步處理的單元測試

2.7 本章小結

第3章 OpenGL ES 2.0概覽

香蕉小视频app3.1 圖形處理器簡介

3.2 什么是OpenGL ES

3.3 OpenGL ES 2.0渲染管線

3.3.1 頂點數組

3.3.2 頂點著色器

3.3.3 圖元裝配

3.3.4 光柵化

3.3.5 片段著色器

3.3.6 片段測試

3.4 渲染管線中的并行計算

3.5 構建高性能的渲染引擎

3.6 幀緩沖

3.7 本章小結

第4章 全新的繪制系統

香蕉小视频app4.1 新繪制系統的特點

4.2 繪制系統概覽

香蕉小视频app4.3 RenderCommand

香蕉小视频app4.4 RenderQueue

香蕉小视频app4.5 GroupCommand

4.6 Render

4.6.1 RenderCommand的排序

香蕉小视频app4.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 紋理數據的傳輸

5.2.3 解包

香蕉小视频app5.3 客戶端圖像格式

5.3.1 紋理格式的對應關系

香蕉小视频app5.3.2 圖像數據格式轉換

香蕉小视频app5.4 紋理對象和加載紋理

香蕉小视频app5.5 紋理單元與多重紋理

5.6 紋理縮放

5.6.1 紋理縮小

5.6.2 紋理放大

5.6.3 在Cocos2d-x中設置過濾模式

5.7 多級紋理

香蕉小视频app5.7.1 多級紋理過濾模式

香蕉小视频app5.7.2 多級紋理的上傳

5.7.3 多級紋理的生成

5.8 紋理壓縮

香蕉小视频app5.8.1 壓縮紋理的特點

5.8.2 壓縮紋理的實現

5.8.3 在Cocos2d-x中使用壓縮紋理

香蕉小视频app5.8.4 PVRTC和PVRTC2

5.8.5 ETC

5.8.6 針對不同設備使用不同的壓縮紋理

5.9 紋理緩存管理

香蕉小视频app5.9.1 紋理的生命周期

5.9.2 用TextureCache來管理紋理

香蕉小视频app5.9.3 場景過渡中的資源管理

5.9.4 Android下的紋理恢復處理

香蕉小视频app5.10 紋理所占內存的計算

5.11 使用紋理最佳實踐

5.11.1 硬件層面

5.11.2 程序層面

5.11.3 資源層面

5.12 本章小結

第6章 精靈

6.1 用Sprite繪制一個矩形區域

香蕉小视频app6.1.1 V3F_C4B_T2F_Quad結構體

6.1.2 使用QuadCommand進行繪制

香蕉小视频app6.1.3 將Sprite作為子元素

6.2 Sprite的繪制屬性

6.2.1 顏色混合

6.2.2 顏色疊加

香蕉小视频app6.3 Alpha預乘

6.4 精靈表

6.5 精靈動畫

香蕉小视频app6.6 批繪制還是自動批繪制

香蕉小视频app6.6.1 SpriteBatchNode

香蕉小视频app6.6.2 TextureAtlas

香蕉小视频app6.6.3 SpriteBatchNode的特點和限制

香蕉小视频app6.7 部分拉伸:九宮格

6.8 本章小結

香蕉小视频app第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 數組

7.3 存儲限定符

7.3.1 默認限定符

7.3.2 常量限定符

7.3.3 屬性限定符

香蕉小视频app7.3.4 全局限定符

香蕉小视频app7.3.5 易變量限定符

7.4 構造器

7.4.1 標量的轉換構造

7.4.2 矢量和矩陣構造器

香蕉小视频app7.4.3 結構體構造器

7.5 矢量的分量

7.6 矩陣的分量

7.7 結構體和成員

7.8 矢量和矩陣操作符

7.9 本章小結

香蕉小视频app第8章 OpenGL ES著色程序

香蕉小视频app8.1 頂點和頂點數組

8.1.1 圖元與頂點

8.1.2 頂點屬性狀態

8.1.3 頂點數組

8.2 頂點緩沖對象

香蕉小视频app8.2.1 頂點數組緩沖對象

8.2.2 索引數組緩沖對象

8.2.3 使用VAO緩存頂點數組狀態

8.3 著色器程序

香蕉小视频app8.3.1 著色器程序字符串

香蕉小视频app8.3.2 著色器的加載和編譯

香蕉小视频app8.3.3 著色器程序對象

香蕉小视频app8.4 Cocos2d-x著色器子系統

8.4.1 GLProgram與Node之間的關系

香蕉小视频app8.4.2 GLProgramState

香蕉小视频app8.4.3 著色器程序的使用過程

香蕉小视频app8.4.4 GLProgramState的管理

8.4.5 GLProgramState的限制

8.5 頂點著色器

8.5.1 輸入參數

香蕉小视频app8.5.2 頂點坐標輸出參數

8.5.3 易變量輸出參數

8.6 片段著色器

8.6.1 輸入參數

8.6.2 紋理采樣

8.6.3 輸出參數

香蕉小视频app8.7 著色器編輯工具

8.8 示例

香蕉小视频app8.8.1 使用ETC壓縮紋理

8.8.2 動態設置著色器參數

8.9 著色器程序最佳實踐

8.10 本章小結

第9章 幀緩沖

香蕉小视频app9.1 GroupCommand

香蕉小视频app9.1.1 使用GroupCommand的流程

9.1.2 GroupCommand的限制

9.2 幀緩沖

9.2.1 綁定和管理幀緩沖

9.2.2 將圖像附加到幀緩沖

9.2.3 渲染緩沖對象

9.2.4 將Renderbuffer附加到幀緩沖

香蕉小视频app9.2.5 將Texture附加到幀緩沖

9.2.6 幀緩沖完成狀態

香蕉小视频app9.3 RenderTexture

香蕉小视频app9.3.1 RenderTexture的初始化

9.3.2 RenderTexture的繪制

9.3.3 ReadPixels

9.3.4 RenderTexture的限制及用途

9.4 本章小結

第10章 片段操作

10.1 片段操作簡述

10.2 邏輯緩沖區

10.2.1 位平面

10.2.2 按位計算

10.3 片段測試

10.3.1 模板測試

香蕉小视频app10.3.2 深度測試

10.3.3 模板測試的步驟

10.3.4 片段測試的用途

10.4 全緩沖區操作

香蕉小视频app10.4.1 控制緩沖區的更新

10.4.2 清理緩沖區

10.5 ClippingNode

10.5.1 ClippingNode的繪制流程

香蕉小视频app10.5.2 ClippingNode的模板測試分析

10.6 本章小結

第11章 多分辨率支持

11.1 概述

11.2 設計分辨率

11.2.1 縮放策略

11.2.2 調整元素位置

11.2.3 幾個有用的變量

香蕉小视频app11.2.4 使用屏幕分辨率

香蕉小视频app11.2.5 視口設置

11.2.6 什么時候縮放了

11.3 資源分辨率

香蕉小视频app11.3.1 資源分辨率的設置

11.3.2 真實分辨率InPixels

11.3.3 什么時候縮放資源

11.4 本章小結

第12章 事件分發

12.1 概述

12.1.1 什么是事件

香蕉小视频app12.1.2 事件的工作機制

12.1.3 事件系統的特點

12.2 訂閱者

12.2.1 事件類型

香蕉小视频app12.2.2 注冊與管理訂閱者

12.3 事件的分發

香蕉小视频app12.3.1 訂閱者的排序

12.3.2 嵌套事件

12.3.3 在事件分發中修改訂閱者

12.3.4 停止分發事件

12.4 事件與Node

12.4.1 暫停與恢復

香蕉小视频app12.4.2 刪除訂閱者

12.5 觸摸事件

香蕉小视频app12.5.1 EventListenerTouchAllAtOnce

香蕉小视频app12.5.2 EventListenerTouchOneByOne

香蕉小视频app12.5.3 單點和多點觸摸之間的關系

12.5.4 觸摸點的位置判斷

12.5.5 可見性與觸摸事件

12.6 其他

香蕉小视频app12.6.1 其他操作系統事件

香蕉小视频app12.6.2 EventCustom

香蕉小视频app12.6.3 內存管理

香蕉小视频app12.6.4 回調與返回值

12.6.5 單元測試

12.6.6 其他事件

12.7 本章小結

第13章 字體的故事

13.1 計算機字體的歷史

香蕉小视频app13.2 輪廓字形概述

13.2.1 點

13.2.2 輪廓

香蕉小视频app13.2.3 輪廓的方向

13.2.4 輪廓的交叉

13.2.5 混合輪廓字形

香蕉小视频app13.2.6 字形格子

香蕉小视频app13.3 FreeType字體引擎

13.3.1 字體文件及字形索引

13.3.2 字符度量

香蕉小视频app13.3.3 FreeType字形解析過程

13.3.4 FreeType字形裝載

13.4 FontAtlas

香蕉小视频app13.4.1 Font

13.4.2 FontAtlasCache

13.5 Label

13.5.1 通用屬性

13.5.2 Font字符集

13.5.3 輪廓字體的縮放

13.5.4 特效

香蕉小视频app13.6 使用字體的最佳實踐

第14章 動畫系統

14.1 概述

14.2 線性插值

香蕉小视频app14.2.1 標量插值

香蕉小视频app14.2.2 矢量插值

香蕉小视频app14.2.3 變換矩陣插值

14.2.4 插值在動畫系統中的運用

香蕉小视频app14.3 給元素添加動畫

14.3.1 Action是一個自描述的對象

14.3.2 在Node上執行動畫

14.3.3 控制動畫的動畫

14.4 動畫系統架構

14.4.1 Speed

香蕉小视频app14.4.2 緩動函數

香蕉小视频app14.4.3 自定義動畫——精靈閃白

14.5 本章小結

第15章 碰撞及物理引擎

15.1 物理引擎概述

香蕉小视频app15.2 碰撞檢測系統

15.2.1 剛體

15.2.2 接觸和碰撞

香蕉小视频app15.2.3 碰撞查詢

15.3 剛體動力學

15.3.1 控制剛體的運動

15.3.2 碰撞響應

15.3.3 約束

15.4 整合物理引擎

15.4.1 剛體與可視對象

15.4.2 物理世界

香蕉小视频app15.4.3 游戲循環階段

15.5 預處理與工具

15.6 本章小結

第16章 運行時游戲對象模型

16.1 概述

香蕉小视频app16.2 運行時游戲對象模型

香蕉小视频app16.2.1 以對象為中心的架構

香蕉小视频app16.2.2 組件模型

香蕉小视频app16.2.3 以屬性為中心的架構

香蕉小视频app16.3 Entity Component System

16.3.1 屬性結構

16.3.2 分離數據與行為

16.3.3 數據驅動

香蕉小视频app16.4 對象查詢與消息通信

16.4.1 根據唯一標識符查詢

16.4.2 根據類型查詢

16.4.3 面向類型編程

16.4.4 游戲對象數據庫

香蕉小视频app16.5 實時更新游戲對象

16.5.1 更新的性能優化

香蕉小视频app16.5.2 更新的時序

16.6 本章小結

香蕉小视频app第17章 Genius-x開源框架

17.1 Genius-x是什么

17.1.1 Genius-x架構一覽

17.1.2 Genius-x項目結構及使用

香蕉小视频app17.2 游戲對象模型

17.2.1 Entity

香蕉小视频app17.2.2 Component

17.2.3 System

17.2.4 ECSManager

17.2.5 數據驅動

香蕉小视频app17.2.6 NodeCom

17.2.7 對象的層級結構

香蕉小视频app17.3 數據格式、加載及串流

香蕉小视频app17.3.1 數據格式

17.3.2 文件加載和管理

17.3.3 游戲世界的串流

香蕉小视频app17.4 游戲通用系統

17.5 共享組件

17.6 示例

第18章 腳本

18.1 腳本的概念

18.1.1 腳本語言的特征

香蕉小视频app18.1.2 Lua腳本語言

香蕉小视频app18.1.3 腳本所需的架構

香蕉小视频app18.2 運行時腳本語言的功能

18.2.1 對原生編程語言的接口

香蕉小视频app18.2.2 游戲對象句柄

18.2.3 在腳本中接收及處理事件

18.2.4 發送事件

18.2.5 面向對象腳本語言

香蕉小视频app18.3 Lua bindings

18.3.1 生成綁定代碼

18.3.2 在程序中使用綁定代碼

18.3.3 自定義綁定

香蕉小视频app18.4 在Lua中使用Genius-x

18.4.1 配置環境

18.4.2 創建Component腳本

香蕉小视频app18.4.3 創建System腳本

18.4.4 其他接口

18.5 本章小結

參考文獻

我所理解的Cocos2d-x 精彩文摘

香蕉小视频app第16章 運行時游戲對象模型

到目前為止,我們討論的所有內容都可以稱之為低階引擎系統,例如Renderer如何將網格繪制到屏幕上,紋理如何被使用,字體如何被繪制,如何從人體學接口設備獲取玩家輸入信息,如何處理物體的碰撞,以及如何對物體執行動畫等。這些幾乎都是和游戲性無關的一些基礎功能。

香蕉小视频app當開始設計游戲的時候,開發者面對的往往是一個更上層的,可以稱之為游戲性(Gameplay)基礎系統的高階引擎系統,例如怎樣表示游戲中的對象,怎樣組織它們的行為和狀態,設計師怎樣通過數據驅動來快速修改關卡及游戲配置,怎樣高效有序地組織游戲對象之間的邏輯更新等。這些筆者稱之為游戲性架構(Gameplay Architecture),或者很多開發者稱之為游戲架構。理論上,游戲性架構的一些理論和實踐甚至可以和游戲引擎無關。

當然,游戲性架構其實涉及很多內容,例如它可以包括運行時游戲對象模型、關卡及串流、實時更新游戲對象模型、事件分發及腳本系統等。本章將會聚焦于運行時游戲對象模型,講述常見的幾種游戲對象設計的概念、方式及優缺點。

16.1 概述

在所有游戲性架構相關的內容中,運行時游戲對象模型可能是最復雜的系統,并且不同的游戲引擎呈現出的差異極大。例如Unity3D提供的組件模型,虛幻引擎提供的面向對象繼承的模型,其他一些游戲例如《末日危城(Dungeon Siege)》則使用一種不同于兩者的基于數據驅動的游戲對象模型。

香蕉小视频app這些不同的游戲對象模型之間呈現出很大的設計思維及使用上的差異,但是它們往往都提供或者必須具備一些通用的功能,這些包括但不限于:

(1)管理游戲對象的創建及銷毀。游戲中經常會動態創建各種游戲對象,例如一個塔防游戲會定時出現一些小怪物,子彈在撞擊到目標時立即被銷毀等。許多游戲引擎都提供一種統一的動態創建、銷毀游戲對象的方式,并管理游戲對象的內存及資源,例如第17章即將講述的Genius-x框架中使用createEntity()、removeEntity(entity)來動態創建和銷毀一個游戲對象。但是在Cocos2d-x中卻不是通過統一的方式創建和銷毀游戲對象,它使用每個Node子類自己的構造函數來創建,并使用一種特殊的方式管理內存(參見第2章)。

香蕉小视频app(2)聯系底層游戲引擎。每個游戲對象要能夠通過某種方式訪問底層的游戲引擎系統,例如能夠渲染三角形網格、執行碰撞檢測,對角色執行動畫等。在Unity3D引擎中,每個游戲對象(GameObject)可以通過添加一個與底層引擎功能相關的組件(Componment)來訪問底層引擎系統。Cocos2d-x的Node類則直接集成了物理模擬、動畫、實時邏輯更新等接口。

(3)實時模擬對象行為。游戲是一個高度實時的系統,游戲對象的狀態、行為在每一幀都可能會隨著時間發生變化,這需要一套高效的游戲對象更新機制。對象可能需要以特定的邏輯次序進行更新。此外,除了邏輯次序,游戲對象之間還可能存在依賴關系,需要按照一定的次序更新(關于游戲對象更新的次序會在本章后面講述)。

(4)定義新游戲對象類型。在開發過程中,隨著游戲需求的改變和演進,游戲對象模型必須有足夠的彈性,可以容易地加入新的對象類型。理想情況下,新的游戲類型應可以完全用數據驅動的方式定義,但是在實際情況中,大部分新增游戲類型都需要程序員的參與。在Genius-x框架中,新的不同行為的組合類型可以通過修改數據文件來實現,而新的行為則可以通過腳本來實現,然后修改數據文件來添加新的行為。

(5)唯一的對象標識符。游戲世界可能會包含成百上千的游戲對象,在運行時必須能夠識別和找到想要的對象,這意味著每種對象需要有某種唯一標識符。例如在Cocos2d-x 中可以通過給一個Node指定一個字符串名稱,然后通過字符串標識符查找一個游戲對象。

香蕉小视频app(6)游戲對象查詢。除了上面按游戲唯一標識符查詢游戲對象,游戲性系統還需要一些更高級的查詢方式,例如找到某種類型的游戲對象,或者某個范圍的敵人等。在面向組件或者屬性的架構中,游戲對象是以組件/屬性為單位存儲的,很容易查找具有某個屬性類型的游戲對象組合,并且這種查找游戲對象的方式對數據驅動更友好,筆者稱之為面向類型編程。

除了上述提到的這些,運行時游戲對象模型還包括有限狀態機,用于同一個網絡內的對象復制、對象序列化和持久性存檔等。

圖書網:我所理解的Cocos2d-x pdf

恭喜,此資源為免費資源,請先
聲明:本站所有資源收集于互聯網,只做學習和交流使用,版權歸著作人和出版社所有,請在下載后24小時之內自覺刪除,若作商業用途,請購買正版,由于未及時購買和付費發生的侵權行為,與本站無關。本站發布的內容若侵犯到您的權益,請聯系站長刪除,我們將及時處理!
繼續閱讀
  • 我的微信
  • 掃一掃加好友
  • weinxin
  • 微信公眾號
  • 掃一掃關注
  • weinxin
匿名

發表評論

匿名網友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: