我所理解的Cocos2d-x

我所理解的Cocos2d-x

《我所理解的Cocos2d-x》是2014年電子出版社出版斬圖書,作者是秦春林

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

基本介紹

  • 中文名:我所理解的Cocos2d-x
  • 作者:秦春林
  • 出版時間:2014年11月
  • 出版社: 電子工業出版社  
  • 頁數:404 頁
  • ISBN: 9787121246258
  • 定價:79.00
  • 開本:16 開
  • 針對對象:Cocos2d-x 3.x版本
內容提要,目錄,作者簡介,

內容提要

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

目錄

第1章 全新的Cocos2d-x 3.0 1
1.1 Cocos2d-x 3.0的歷史意義 1
1.1.1 回歸C++風格 2
1.1.2 更靈活的渲染架構 2
1.1.3 更自由的發展 2
1.2 Cocos2d-x 3.0的新特性 3
1.2.1 使用C++風格 3
1.2.2 跨平台的Label 6
1.2.3 新的渲染系統 6
1.2.4 統一的訊息分發 8
1.2.5 物理引擎集成 9
1.2.6 新的數據結構 10
1.2.7 其他 14
1.3 Cocos2d-x引擎展望 15
1.3.1 3D 16
1.3.2 Cocos Code IDE 16
1.4 本章小結 17
第2章 Cocos2d-x架構一瞥 19
2.1 Cocos2d-x引擎系統總覽 19
2.2 Cocos2d-x記憶體管理機制 21
2.2.1 C++顯式堆記憶體管理 21
2.2.2 C++ 11中的智慧型指針 22
2.2.3 為什麼不使用智慧型指針 23
2.2.4 垃圾回收機制 23
2.2.5 Cocos2d-x記憶體管理機制 24
2.2.6 Cocos2d-x中的智慧型指針 29
2.2.7 怎樣進行記憶體管理 35
2.3 UI樹及運行時遊戲對象 35
2.3.1 位置與變換 35
2.3.2 坐標系 36
2.3.3 UI樹 39
2.3.4 UI元素與記憶體管理 45
2.4 應用程式架構 46
2.4.1 遊戲生命周期 46
2.4.2 視窗尺寸 48
2.4.3 場景管理 48
2.4.4 遊戲循環 49
2.5 實時更新遊戲對象 52
2.5.1 幀率 52
2.5.2 Scheduler 53
2.5.3 時間線 54
2.5.4 邏輯更新優先權 55
2.5.5 性能問題 56
2.6 Cocos2d-x的主執行緒 56
2.6.1 在主執行緒中執行異步處理 57
2.6.2 紋理的異步載入 58
2.6.3 異步處理的單元測試 60
2.7 本章小結 60
第3章 OpenGL ES 2.0概覽 62
3.1 圖形處理器簡介 62
3.2 什麼是OpenGL ES 63
3.3 OpenGL ES 2.0渲染管線 64
3.3.1 頂點數組 65
3.3.3 圖元裝配 66
3.3.4 光柵化 69
3.3.5 片段著色器 70
3.3.6 片段測試 70
3.4 渲染管線中的並行計算 71
3.5 構建高性能的渲染引擎 72
3.6 幀緩衝 73
3.7 本章小結 74
第4章 全新的繪製系統 76
4.1 新繪製系統的特點 76
4.2 繪製系統概覽 77
4.3 RenderCommand 79
4.4 RenderQueue 80
4.5 GroupCommand 81
4.6 Render 84
4.6.1 RenderCommand的排序 84
4.6.2 QuadCommand 85
4.7 元素的可見性 87
4.8 繪製的時機 89
4.9 示例:自定義RenderCommand 91
4.10 本章小結 95
第5章 紋理 96
5.1 光柵化 96
5.1.1 多重採樣 97
5.1.2 紋理坐標 98
5.2 像素矩形 99
5.2.1 像素存儲模式 99
5.2.2 紋理數據的傳輸 99
5.2.3 解包 100
5.3 客戶端圖像格式 103
5.3.1 紋理格式的對應關係 104
5.3.2 圖像數據格式轉換 105
5.4 紋理對象和載入紋理 107
5.5 紋理單元與多重紋理 109
5.6 紋理縮放 110
5.6.1 紋理縮小 110
5.6.2 紋理放大 111
5.6.3 在Cocos2d-x中設定過濾模式 112
5.7 多級紋理 113
5.7.1 多級紋理過濾模式 113
5.7.2 多級紋理的上傳 114
5.7.3 多級紋理的生成 115
5.8 紋理壓縮 116
5.8.1 壓縮紋理的特點 116
5.8.2 壓縮紋理的實現 117
5.8.3 在Cocos2d-x中使用壓縮紋理 118
5.8.4 PVRTC和PVRTC2 120
5.8.5 ETC 122
5.8.6 針對不同設備使用不同的壓縮紋理 123
5.9 紋理快取管理 123
5.9.1 紋理的生命周期 124
5.9.2 用TextureCache來管理紋理 125
5.9.3 場景過渡中的資源管理 127
5.9.4 Android下的紋理恢復處理 130
5.10 紋理所占記憶體的計算 131
5.11 使用紋理最佳實踐 133
5.11.1 硬體層面 133
5.11.2 程式層面 133
5.11.3 資源層面 134
5.12 本章小結 135
第6章 精靈 137
6.1 用Sprite繪製一個矩形區域 137
6.1.1 V3F_C4B_T2F_Quad結構體 138
6.1.2 使用QuadCommand進行繪製 139
6.1.3 將Sprite作為子元素 140
6.2 Sprite的繪製屬性 140
6.2.1 顏色混合 141
6.2.2 顏色疊加 144
6.3 Alpha預乘 148
6.4 精靈表 150
6.5 精靈動畫 152
6.6 批繪製還是自動批繪製 154
6.6.1 SpriteBatchNode 154
6.6.2 TextureAtlas 156
6.6.3 SpriteBatchNode的特點和限制 157
6.7 部分拉伸:九宮格 157
6.8 本章小結 158
第7章 OpenGL ES著色語言 161
7.1 概覽 161
7.2 基礎類型 162
7.2.1 空類型 163
7.2.2 布爾類型 163
7.2.3 整型 163
7.2.4 浮點型 163
7.2.5 矢量 164
7.2.6 矩陣 164
7.2.7 採樣器 164
7.2.8 結構體 165
7.2.9 數組 165
7.3 存儲限定符 166
7.3.1 默認限定符 167
7.3.2 常量限定符 167
7.3.3 屬性限定符 167
7.3.4 全局限定符 168
7.3.5 易變數限定符 169
7.4 構造器 170
7.4.1 標量的轉換構造 170
7.4.2 矢量和矩陣構造器 171
7.4.3 結構體構造器 172
7.5 矢量的分量 173
7.6 矩陣的分量 174
7.7 結構體和成員 174
7.8 矢量和矩陣操作符 175
7.9 本章小結 176
第8章 OpenGL ES著色程式 177
8.1 頂點和頂點數組 177
8.1.1 圖元與頂點 178
8.1.2 頂點屬性狀態 178
8.1.3 頂點數組 180
8.2 頂點緩衝對象 185
8.2.1 頂點數組緩衝對象 187
8.2.2 索引數組緩衝對象 188
8.2.3 使用VAO快取頂點數組狀態 190
8.3 著色器程式 192
8.3.1 著色器程式字元串 192
8.3.2 著色器的載入和編譯 193
8.3.3 著色器程式對象 195
8.4 Cocos2d-x著色器子系統 196
8.4.1 GLProgram與Node之間的關係 197
8.4.2 GLProgramState 199
8.4.3 著色器程式的使用過程 202
8.4.4 GLProgramState的管理 204
8.4.5 GLProgramState的限制 205
8.5.1 輸入參數 206
8.5.2 頂點坐標輸出參數 207
8.5.3 易變數輸出參數 208
8.6 片段著色器 209
8.6.1 輸入參數 210
8.6.2 紋理採樣 210
8.6.3 輸出參數 211
8.7 著色器編輯工具 211
8.8 示例 213
8.8.1 使用ETC壓縮紋理 214
8.8.2 動態設定著色器參數 217
8.9 著色器程式最佳實踐 220
8.10 本章小結 220
第9章 幀緩衝 223
9.1 GroupCommand 223
9.1.1 使用GroupCommand的流程 224
9.1.2 GroupCommand的限制 225
9.2 幀緩衝 226
9.2.1 綁定和管理幀緩衝 227
9.2.2 將圖像附加到幀緩衝 228
9.2.3 渲染緩衝對象 228
9.2.4 將Renderbuffer附加到幀緩衝 230
9.2.5 將Texture附加到幀緩衝 230
9.2.6 幀緩衝完成狀態 231
9.3 RenderTexture 234
9.3.1 RenderTexture的初始化 235
9.3.2 RenderTexture的繪製 238
9.3.3 ReadPixels 239
9.3.4 RenderTexture的限制及用途 240
9.4 本章小結 240
第10章 片段操作 242
10.1 片段操作簡述 242
10.2 邏輯緩衝區 243
10.2.1 位平面 244
10.2.2 按位計算 245
10.3 片段測試 248
10.3.1 模板測試 248
10.3.2 深度測試 250
10.3.3 模板測試的步驟 251
10.3.4 片段測試的用途 252
10.4 全緩衝區操作 254
10.4.1 控制緩衝區的更新 254
10.4.2 清理緩衝區 254
10.5 ClippingNode 255
10.5.1 ClippingNode的繪製流程 255
10.5.2 ClippingNode的模板測試分析 256
10.6 本章小結 258
第11章 多解析度支持 259
11.1 概述 259
11.2 設計解析度 260
11.2.1 縮放策略 261
11.2.2 調整元素位置 262
11.2.3 幾個有用的變數 263
11.2.4 使用螢幕解析度 264
11.2.5 視口設定 264
11.2.6 什麼時候縮放了 265
11.3 資源解析度 267
11.3.1 資源解析度的設定 267
11.3.2 真實解析度InPixels 268
11.3.3 什麼時候縮放資源 269
11.4 本章小結 270
第12章 事件分發 272
12.1 概述 272
12.1.1 什麼是事件 272
12.1.2 事件的工作機制 272
12.1.3 事件系統的特點 273
12.2 訂閱者 274
12.2.1 事件類型 275
12.2.2 註冊與管理訂閱者 276
12.3 事件的分發 278
12.3.1 訂閱者的排序 280
12.3.2 嵌套事件 282
12.3.3 在事件分發中修改訂閱者 282
12.3.4 停止分發事件 283
12.4 事件與Node 284
12.4.1 暫停與恢復 284
12.4.2 刪除訂閱者 285
12.5 觸摸事件 285
12.5.1 EventListenerTouchAllAtOnce 286
12.5.2 EventListenerTouchOneByOne 286
12.5.3 單點和多點觸摸之間的關係 288
12.5.4 觸摸點的位置判斷 288
12.5.5 可見性與觸摸事件 289
12.6 其他 289
12.6.1 其他作業系統事件 290
12.6.2 EventCustom 290
12.6.3 記憶體管理 290
12.6.4 回調與返回值 291
12.6.5 單元測試 291
12.6.6 其他事件 291
12.7 本章小結 292
第13章 字型的故事 293
13.1 計算機字型的歷史 293
13.2 輪廓字形概述 294
13.2.1 點 295
13.2.2 輪廓 295
13.2.3 輪廓的方向 296
13.2.4 輪廓的交叉 296
13.2.5 混合輪廓字形 296
13.2.6 字形格子 297
13.3 FreeType字型引擎 297
13.3.1 字型檔及字形索引 298
13.3.2 字元度量 298
13.3.3 FreeType字形解析過程 299
13.3.4 FreeType字形裝載 301
13.4 FontAtlas 304
13.4.1 Font 305
13.4.2 FontAtlasCache 308
13.5 Label 309
13.5.1 通用屬性 310
13.5.2 Font字元集 312
13.5.3 輪廓字型的縮放 312
13.5.4 特效 316
13.6 使用字型的最佳實踐 319
第14章 動畫系統 321
14.1 概述 321
14.2 線性插值 323
14.2.1 標量插值 323
14.2.2 矢量插值 323
14.2.3 變換矩陣插值 324
14.2.4 插值在動畫系統中的運用 324
14.3 給元素添加動畫 326
14.3.1 Action是一個自描述的對象 326
14.3.2 在Node上執行動畫 327
14.3.3 控制動畫的動畫 329
14.4 動畫系統架構 331
14.4.1 Speed 333
14.4.2 緩動函式 333
14.4.3 自定義動畫——精靈閃白 334
14.5 本章小結 337
第15章 碰撞及物理引擎 339
15.1 物理引擎概述 339
15.2 碰撞檢測系統 340
15.2.1 剛體 340
15.2.2 接觸和碰撞 343
15.2.3 碰撞查詢 348
15.3.1 控制剛體的運動 349
15.3.2 碰撞回響 350
15.3.3 約束 351
15.4 整合物理引擎 352
15.4.1 剛體與可視對象 352
15.4.2 物理世界 355
15.4.3 遊戲循環階段 357
15.5 預處理與工具 357
15.6 本章小結 358
第16章 運行時遊戲對象模型 360
16.1 概述 360
16.2 運行時遊戲對象模型 361
16.2.1 以對象為中心的架構 362
16.2.2 組件模型 364
16.2.3 以屬性為中心的架構 367
16.3 Entity Component System 369
16.3.1 屬性結構 370
16.3.2 分離數據與行為 371
16.3.3 數據驅動 372
16.4 對象查詢與訊息通信 373
16.4.1 根據唯一標識符查詢 374
16.4.2 根據類型查詢 375
16.4.3 面向類型編程 375
16.4.4 遊戲對象資料庫 376
16.5 實時更新遊戲對象 377
16.5.1 更新的性能最佳化 377
16.5.2 更新的時序 377
16.6 本章小結 379
第17章 Genius-x開源框架 381
17.1 Genius-x是什麼 381
17.1.1 Genius-x架構一覽 382
17.1.2 Genius-x項目結構及使用 384
17.2 遊戲對象模型 385
17.2.1 Entity 385
17.2.2 Component 388
17.2.3 System 391
17.2.4 ECSManager 394
17.2.5 數據驅動 397
17.2.6 NodeCom 399
17.2.7 對象的層級結構 403
17.3 數據格式、載入及串流 403
17.3.1 數據格式 404
17.3.2 檔案載入和管理 405
17.3.3 遊戲世界的串流 406
17.4 遊戲通用系統 407
17.5 共享組件 409
17.6 示例 409
第18章 腳本 411
18.1 腳本的概念 411
18.1.1 腳本語言的特徵 412
18.1.2 Lua腳本語言 412
18.1.3 腳本所需的架構 413
18.2 運行時腳本語言的功能 415
18.2.1 對原生程式語言的接口 415
18.2.2 遊戲對象句柄 416
18.2.3 在腳本中接收及處理事件 423
18.2.4 傳送事件 427
18.2.5 面向對象腳本語言 427
18.3 Lua bindings 430
18.3.1 生成綁定代碼 430
18.3.2 在程式中使用綁定代碼 431
18.3.3 自定義綁定 432
18.4 在Lua中使用Genius-x 433
18.4.1 配置環境 433
18.4.2 創建Component腳本 433
18.4.3 創建System腳本 434
18.4.4 其他接口 435
18.5 本章小結 435

作者簡介

秦春林: 畢業於合肥工業大學,自大學開始自學編程,先後從事過工作流軟體,雲計算,Web等相關的工作。2011年開始進入遊戲開發領域,主持並移植了Cocos2d-x-for-XNA項目。喜歡技術分享,發起並組織了北京快樂技術沙龍,多次作為講師參與微軟,CSDN,51CTO以及9RIA等組織的各類技術培訓和講座。參與了手遊項目《天降》的開發,目前主要的興趣方向是計算機圖形學和遊戲引擎架構,致力於用軟體技術豐富遊戲世界的表現及品質。

相關詞條

熱門詞條

聯絡我們