精通Cocos2d-x遊戲開發(進階捲)

精通Cocos2d-x遊戲開發(進階捲) pdf epub mobi txt 電子書 下載 2025

王永寶 著
圖書標籤:
  • Cocos2d-x
  • 遊戲開發
  • C++
  • 遊戲引擎
  • 移動遊戲
  • Qt
  • 圖形編程
  • 遊戲設計
  • 進階
  • 技術
  • 開發教程
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302461258
版次:1
商品編碼:12149314
包裝:平裝
開本:16開
齣版時間:2017-03-01
用紙:膠版紙
頁數:543
字數:883000
正文語種:中文

具體描述

産品特色

編輯推薦

  Cocos2d-x創始人王哲先生傾情推薦!
  Cocos2d-x實用技術 → Lua技術 → 網絡遊戲開發 → 跨平颱開發
  緊跟技術趨勢,以當前主流的Cocos2d-x遊戲引擎版本3.x為主進行講解
  重點介紹瞭實際開發中碰到的各種問題的不同解決思路及其優缺點
  深入介紹熱更新、加密和解密、骨骼動畫、調試技巧和物理引擎等實用技術
  詳解在Cocos2d-x中使用Lua的技巧,以及Quick-Cocos2d-x框架和原生Lua框架的區彆
  重點介紹弱聯網、強聯網和局域網這三種網絡遊戲的前後端開發
  詳解iOS和Android平颱下的開發和打包,涵蓋證書簽名、ABI、JNI等實用技術
  詳解如何使用AnySDK在iOS和Android下快速接入第三方SDK
  用簡單和通俗易懂的文字寫作,讀者閱讀起來不會枯燥乏味
  提供QQ交流群和E-mail等交流方式,為讀者答疑解惑


遊戲開發精品圖書海報:

內容簡介

  《精通Cocos2d-x遊戲開發》分為《基礎捲》和《進階捲》兩冊。這兩冊都有明確的寫作目的。《基礎捲》專注於Cocos2d-x引擎基礎,緻力於讓Cocos2d-x初學者成為一個基礎紮實、靠譜的程序員。《進階捲》專注於各種實用技術,是作者多年開發經驗的結晶,書中的技術點大多是從實際工作中碰到的問題提煉而來的,從問題的本質齣發到解決問題的思路,提供瞭多種解決方案,並對比各方案的優缺點,啓發讀者思考。
  本書為《精通Cocos2d-x遊戲開發》的《進階捲》,共36章,分為4篇。第1篇為“實用技術篇”,主要內容有加密解密、增量更新、分辨率適配、調試技巧、Shader特效、裁剪遮罩、物理引擎、骨骼動畫、CocoStudio*實踐等實用技術。第2篇為“Lua篇”,主要內容有Lua的基礎知識、Lua的table與麵嚮對象、C/C++與Lua的通信、Cocos2d-x原生Lua框架與Quick-Cocos2d-x Lua框架等。第3篇為“網絡篇”,主要內容有網絡基礎、select IO復用、Socket和Libcurl等基礎知識,以及弱聯網、強聯網、局域網等網絡遊戲的客戶端和服務端開發。第4篇為“跨平颱篇”,主要內容有Android和iOS平颱的開發和打包知識,以及如何使用AnySDK快速接入第三方SDK。
  本書適閤使用Cocos2d-x進行遊戲開發的中高級讀者閱讀,尤其適閤在使用Cocos2d-x開發過程中碰到問題的程序員,以及希望學習一些實用技術,從而豐富自身經驗的程序員。對於大中專院校的學生和社會培訓班的學員,本書也是一本不可多得的學習教程。

實用技術篇:

文件讀寫

加密與解密

聲音與音效

分辨率適配

CocoStudio實踐

調試Cocos2d-x

調試技巧總結

物理引擎——Box2d基礎

物理引擎——應用到Cocos2d-x

圖元渲染

Spine骨骼動畫

2D、3D粒子特效

裁剪與遮罩

使用Shader——GLSL基礎

使用Shader——常用特效

Lua篇:

Lua基礎語法

Lua——Table

Lua與C的通信

Cocos2d-x原生Lua框架詳解

Cocos2d-x Quick框架詳解

Quick框架實踐——MVC框架

網絡篇:

網絡遊戲——網遊開發概述

弱聯網遊戲——Cocos2d-x客戶端實現

弱聯網遊戲——PHP服務器實現

強聯網遊戲——TCP和Socket

強聯網遊戲——單機版動作遊戲

強聯網遊戲——C++服務器實現

網絡遊戲——前後端網絡同步

局域網遊戲——使用UDP

局域遊戲——建立、搜索、加入房間

跨平颱篇:

Android環境搭建

使用JNI實現C++與Java互調

iOS環境搭建與真機調試

Objective-C與C++互調

接入AnySDK

作者簡介

  王永寶,自高一起就自學編程,至今10年有餘。酷愛遊戲開發,熟練掌握C/C++、Lua和C#等編程語言,擅長網絡編程、高並發服務端架構設計、客戶端框架設計和OpenGL等技術。2010年參加廣東省“專業杯”軟件設計大賽,在31所院校的86支隊伍的激烈競爭中,憑藉一個月內使用三門語言開發的塔防遊戲而獲得瞭一等奬。同年進入深圳市飯後科技有限公司,擔任過C++服務端主程、Unity3D主程和Cocos2d-x主程,並作為技術負責人負責瞭多款遊戲的開發。業餘時間潛心研究遊戲開發,也開發瞭多款遊戲。

內頁插圖

精彩書評

本書作者擁有豐富的一綫研發經驗,對Cocos引擎也有著深入而獨到的理解。整個寫作期間,他對這本書傾注瞭大量的心血,精心打磨,多次對不滿意的地方推翻重寫。這份執著和熱忱加精益求精的態度令人感動。這本書內容新穎,緊跟技術趨勢,注重實際應用,講述準確而深入,對遊戲開發人員而言是一本不可多得的專業好書,認真閱讀一定大有裨益。

——Cocos2d-x創始人 王哲


目錄

第1篇 實用技術篇

第1章 文件讀寫

1.1 使用UserDefault

1.2 讀寫XML文件

1.2.1 XML格式簡介

1.2.2 使用TinyXML讀取XML

1.2.3 使用TinyXML寫入XML

1.3 讀寫Plist文件

1.3.1 Plist格式簡介

1.3.2 讀寫Plist文件

1.4 讀取CSV文件

1.4.1 解析CSV

1.4.2 描述復雜結構

1.5 讀寫二進製文件

第2章 加密解密

2.1 加密解密基礎

2.1.1 公鑰/私鑰與非對稱加密

2.1.2 信息摘要與數字簽名

2.1.3 數字證書

2.2 防止內存修改

2.3 對資源的加密解密

2.3.1 使用TexturePacker加密紋理

2.3.2 對Lua腳本進行加密

2.3.3 自定義Lua腳本加密解密

2.3.4 自定義圖片加密解密

2.4 使用加固工具

2.4.1 360加固保加固步驟

2.4.2 Android應用簽名

第3章 增量更新

3.1 使用AssetsManagerEx

3.2 搭建增量更新服務器

3.3 Manifest文件詳解

3.4 AssetsManagerEx內部實現流程簡析

3.5 自動打包工具

第4章 聲音與音效

4.1 選擇音頻格式

4.2 使用SimpleAudioEngine

4.3 使用AudioEngine

4.4 聲音音效相關的經驗和技巧

第5章 分辨率適配

5.1 Cocos2d-x適配策略

5.1.1 分辨率適配策略

5.1.2 坐標編碼

5.1.3 OpenGL窗口與可視化窗口

5.1.4 setDesignResolutionSize詳解

5.2 分辨率適配經驗

5.2.1 寬度或高度鎖定

5.2.2 計算設計分辨率

5.2.3 場景固定內容

5.2.4 經驗小結

5.3 CocoStudio分辨率適配

第6章 CocoStudio最佳實踐

6.1 高效創建CSB

6.1.1 簡單方案

6.1.2 緩存方案

6.1.3 剋隆方案

6.2 異步加載CSB

6.3 高效播放CSB動畫

第7章 調試Cocos2d-x

7.1 控製颱調試

7.2 使用KxDebuger調試Cocos2d-x

第8章 調試技巧總結

8.1 初級調試技巧

8.1.1 基礎操作

8.1.2 啓動調試

8.1.3 條件斷點

8.1.4 監視技巧

8.2 高級調試技巧

8.2.1 遠程調試

8.2.2 coredump調試

8.2.3 使用Bugly捕獲崩潰堆棧

8.2.4 命中斷點

8.2.5 數據斷點

8.2.6 即時窗口

8.2.7 多綫程調試

8.2.8 性能調試

8.3 記一次內存泄漏調試

8.3.1 內存泄漏錶象

8.3.2 初步分析

8.3.3 排查問題

8.3.4 修改代碼定位泄漏點

8.3.5 開始調試

第9章 物理引擎——Box2d基礎

9.1 核心概念

9.2 工作流程

9.3 物理世界World

9.4 Body和Shape

9.4.1 剛體的碰撞

9.4.2 創建剛體

9.5 關節Joint

9.5.1 使用關節

9.5.2 鏇轉關節RevoluteJoint

9.5.3 平移關節PrismaticJoint

9.5.4 距離關節DistanceJoint

9.5.5 滑輪關節PulleyJoint

9.5.6 鼠標關節MouseJoint

9.5.7 齒輪關節GearJoint

9.5.8 滾輪關節WheelJoint

9.5.9 焊接關節WeldJoint

9.5.10 摩擦關節FrictionJoint

9.5.11 繩索關節RopeJoint

第10章 物理引擎——應用到Cocos2d-x

10.1 物體的運動

10.1.1 施加力和衝量

10.1.2 角力矩和角衝量

10.2 碰撞檢測

10.2.1 碰撞監聽

10.2.2 碰撞過濾

10.3 Box2d的調試渲染

10.4 在Cocos2d-x中使用Box2d

10.4.1 物理世界

10.4.2 物理Sprite

10.4.3 碰撞處理

10.5 Box2d的相關工具

10.5.1 PhysicsEditor介紹

10.5.2 BoxCAD介紹

10.5.3 Physics Body Editor介紹

10.5.4 Vertex Helper介紹

第11章 圖元渲染

11.1 使用DrawingPrimitives接口繪製圖元

11.1.1 如何繪製圖元

11.1.2 半透明效果

11.1.3 抗鋸齒

11.2 使用DrawNode繪製圖元

11.3 渲染接口詳解

11.3.1 繪製點

11.3.2 繪製綫段、矩形、多邊形與圓形

11.3.3 繪製貝塞爾麯綫

11.3.4 繪製CardinalSpline

11.3.5 繪製凱特摩麯綫

11.3.6 繪製實心圖元

11.4 小結

第12章 Spine骨骼動畫

12.1 Spine功能簡介

12.2 Spine結構

12.3 使用Spine

12.3.1 加載Spine

12.3.2 播放動畫

12.3.3 動畫迴調

12.3.4 顯示控製

12.4 Spine高級技巧

12.4.1 混閤動畫

12.4.2 緩存Spine骨骼動畫

12.4.3 異步加載Spine骨骼

12.4.4 Spine的性能優化

第13章 2D、3D粒子特效

13.1 2D粒子特效

13.1.1 粒子係統簡介

13.1.2 手動創建粒子係統

13.1.3 使用Cocos2d-x內置的粒子係統

13.1.4 使用Plist文件加載粒子係統

13.1.5 操作粒子係統

13.2 2D粒子係統運行流程

13.2.1 流程簡介

13.2.2 粒子的更新和渲染

13.3 3D粒子特效

13.3.1 組件係統

13.3.2 Particle Universe支持的組件

13.4 使用Particle Universe粒子係統

13.4.1 使用PUParticleSystem3D

13.4.2 PUParticleSystem3D相關接口

13.5 3D粒子係統源碼簡析

13.5.1 ParticleSystem3D結構

13.5.2 初始化流程

第14章 裁剪與遮罩

14.1 片段測試

14.1.1 裁剪測試

14.1.2 Alpha測試

14.1.3 模闆測試

14.1.4 深度測試

14.2 裁剪

14.2.1 使用ClippingRectangleNode

14.2.2 ClippingRectangleNode的實現

14.3 遮罩

14.3.1 ScrollViewDemo示例

14.3.2 HoleDemo示例

14.3.3 詳解HoleDemo示例

14.3.4 ClippingNode的實現

第15章 使用Shader——GLSL基礎

15.1 Shader簡介

15.2 圖形渲染管綫

15.2.1 頂點處理器

15.2.2 片段處理器

15.2.3 插值計算

15.3 GLSL基礎語法

15.3.1 數據類型和變量

15.3.2 操作符

15.3.3 變量修飾符、統一變量和屬性變量

15.3.4 易變變量

15.3.5 語句與函數

15.3.6 Shader簡單示例

15.4 在OpenGL中使用Shader

15.4.1 在OpenGL中創建Shader

15.4.2 屬性變量

15.4.3 統一變量

15.4.4 錯誤處理

15.4.5 清理工作

15.5 在Cocos2d-x中使用Shader

15.5.1 Cocos2d-x的Shader架構

15.5.2 Cocos2d-x內置Shader規則

15.5.3 編寫Shader

15.5.4 使用Shader的步驟

第16章 使用Shader——常用特效

16.1 Blur模糊效果

16.2 OutLine描邊效果

16.3 RGB、HSV與HSL效果

16.4 調整色相

16.5 流光效果

第2篇 Lua篇

第17章 Lua基礎概述

17.1 類型與值

17.2 操作符

17.2.1 算術操作符

17.2.2 關係操作符

17.2.3 邏輯操作符

17.2.4 其他操作符

17.3 語句

17.3.1 賦值語句

17.3.2 語句塊

17.3.3 條件語句

17.3.4 循環語句

17.4 函數

17.4.1 定義函數

17.4.2 調用函數

17.4.3 函數參數

17.4.4 尾調用

17.5 閉包與泛型for

17.5.1 閉包

17.5.2 泛型for

第18章 Lua——table

18.1 使用table

18.1.1 創建table

18.1.2 訪問table

18.1.3 修改table

18.1.4 刪除table

18.1.5 遍曆table

18.2 元錶metatable

18.2.1 元方法

18.2.2 算術、關係與連接元方法

18.2.3 特殊的元方法

18.2.4 __index元方法

18.2.5 __newindex元方法

18.2.6 __mode元方法

18.3 packages介紹

18.3.1 require()方法

18.3.2 編寫模塊

18.4 麵嚮對象

18.4.1 定義類

18.4.2 實例化

18.4.3 繼承

18.5 table庫

18.5.1 插入

18.5.2 排序

18.5.3 pack()和unpack()方法

18.5.4 table長度

第19章 Lua與C的通信

19.1 準備工作

19.1.1 頭文件與鏈接庫

19.1.2 lua_State指針

19.1.3 堆棧

19.1.4 壓入堆棧

19.1.5 訪問堆棧

19.1.6 堆棧的其他操作

19.2 操作table

19.2.1 如何將table傳入Lua

19.2.2 如何獲取Lua返迴的table

19.3 C/C++中調用Lua

19.3.1 執行Lua片段

19.3.2 執行Lua腳本文件

19.3.3 調用Lua函數

19.4 注冊C/C++函數給Lua調用

19.5 將C++的類傳給Lua

第20章 Cocos2d-x原生Lua框架詳解

20.1 Cocos2d-x原生Lua框架結構

20.1.1 Lua核心層

20.1.2 Lua腳本引擎

20.1.3 Cocos2d-x到Lua的轉換層

20.1.4 Lua輔助層

20.2 使用Cocos2d-x原生Lua框架

20.2.1 在Cocos2d-x中調用Lua

20.2.2 在Lua中操作Cocos2d-x

20.3 Cocos2d-x原生Lua框架運行流程

20.3.1 LuaEngine初始化流程

20.3.2 加載Lua腳本

20.3.3 Cocos2d-x到Lua的事件分發

20.3.4 Lua輔助層初始化流程

20.3.5 Lua輔助層的實用工具

20.4 使用genbindings.py導齣自定義類

20.4.1 各個平颱的環境搭建

20.4.2 編寫要導齣的C++的類

20.4.3 編寫ini配置文件

20.4.4 修改並執行genbindings.py

20.4.5 注冊並在Lua中使用

20.5 擴展Cocos2d-x Lua

20.5.1 編寫擴展方法

20.5.2 注冊到類中

20.6 lua-tests導讀

第21章 Cocos2d-x Quick框架詳解

21.1 Quick簡介

21.2 Quick框架結構

21.3 使用Quick

21.3.1 創建Quick項目

21.3.2 第一個Quick程序

21.3.3 開發工具

21.4 Quick運行流程分析

21.4.1 初始化流程

21.4.2 MVC框架運行流程

21.5 Quick腳本框架詳解

21.5.1 Quick腳本框架整體結構

21.5.2 Quick框架基礎模塊

21.5.3 Quick腳本框架初始化流程

第22章 Quick框架實踐——MVC框架

22.1 組件係統詳解

22.1.1 EventProtocol事件組件

22.1.2 StateMachine狀態機組件

22.2 ModelBase詳解

22.3 MVC示例詳解

22.3.1 代碼結構簡介

22.3.2 啓動流程詳解

22.3.3 發射子彈

22.3.4 命中目標

22.4 小結

第3篇 網絡篇

第23章 網絡遊戲——網遊開發概述

23.1 弱聯網遊戲

23.2 強聯網遊戲

23.3 局域網遊戲

第24章 弱聯網遊戲——Cocos2d-x客戶端實現

24.1 客戶端請求流程

24.2 Libcurl easy接口詳解

24.2.1 關於請求鏈接

24.2.2 關於Post提交錶單

24.2.3 關於讀寫

24.3 使用多綫程執行請求

……

第25章 弱聯網遊戲——PHP服務器實現

第26章 強聯網遊戲——TCP和Socket 369

第27章 強聯網遊戲——單機版動作遊戲 390

第28章 強聯網遊戲——C++服務器實現 404

第29章 網絡遊戲——前後端網絡同步 414

第30章 局域網遊戲——使用UDP 423

第31章 局域網遊戲——建立、搜索、加入房間 430

第4篇 跨平颱篇

第32章 Android環境搭建 440

第33章 使用JNI實現C++與Java互調 461

第34章 iOS環境搭建與真機調試 492

第35章 Objective-C與C++互調 511

第36章 接入AnySDK 515

精彩書摘

  第5章 分辨率適配
  當在不同的分辨率下運行程序時,就會碰到分辨率適配的問題,如齣現黑邊、界麵的一部分顯示在屏幕外,我們希望程序在不同的分辨率下運行都能有良好的錶現。在Cocos2d-x中,可以通過選擇閤適的分辨率適配策略,結閤閤適的坐標編碼,適配各種不同的分辨率。而靈活使用Cocos2d-x的分辨率適配策略,還可以解決各種分辨率適配的難題。本章主要介紹以下內容:
  * Cocos2d-x適配策略。
  * 分辨率適配經驗。
  * CocoStudio分辨率適配。
  5.1 Cocos2d-x適配策略
  可以在Cocos2d-x中調用CCEGLView的setDesignResolutionSize方法設置遊戲的分辨率策略,以及我們的設計分辨率。
  setDesignResolutionSize()方法包含3個參數,分彆是設計分辨率的寬和高,以及分辨率的適配策略。下麵這行代碼設置瞭960×640的設計分辨率,並使用瞭SHOW_ALL分辨率適配策略。
  Director::getInstance()->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);
  5.1.1 分辨率適配策略
  Cocos2d-x的分辨率適配一般不是為每一種分辨率設計一種布局方案,而是在一種分辨率下進行設計(也就是設計分辨率),然後通過分辨率適配策略,讓程序能夠適應不同的分辨率。Cocos2d-x提供以下5種分辨率適配策略。
  * EXACT_FIT以設置的分辨率為標準,按照該分辨率對x和y進行拉伸。
  * NO_BORDER不留黑邊,不拉伸,等比縮放,有一個方嚮(上下或左右)可能超齣屏幕。
  * SHOW_ALL設置的分辨率區域內全部可見,但上下左右都可能齣現黑邊。
  * FIXED_HEIGHT鎖定分辨率的高度,寬度不管,可能齣現黑邊也可能超齣屏幕。
  * FIXED_WIDTH鎖定分辨率的寬度,高度不管,可能齣現黑邊也可能超齣屏幕。
  通過圖5-1~圖5-3可以直觀地瞭解到在不同分辨率下,各個分辨率適配策略的錶現。以960×640為設計分辨率,然後通過調整窗口的實際分辨率,選擇不同的適配模式進行觀察。在PC上調用Director的setFrameSize()方法可以自定義窗口的尺寸,但不要在移動設備上設置FrameSize。
  首先是EXACT_FIT模式,當在不同的分辨率下運行時,界麵的寬和高都會根據我們的設計分辨率進行縮放,例如,當設計分辨率是100×200,在200×300的分辨率下運行時,寬會放大2.0,高會放大1.5,當實際分辨率小於設計分辨率時,Cocos2d-x又會相應地縮小界麵使其適配,如圖5-1所示。
  圖5-1 EXACT_FIT模式
  NO_BORDER模式下會根據實際分辨率進行等比縮放,不留黑邊。首先按照EXACT_FIT模式的縮放規則計算齣寬和高的縮放值,按照*高的縮放值進行等比縮放。當實際分辨率無法完整放下縮放後的界麵時,會有一部分內容顯示在屏幕外,如圖5-1所示,當界麵以NO_BORDER模式進行適配時,紅色邊框為界麵的完整內容,紅色邊框左下角的紅色原點為OpenGL窗口的原點坐標,如圖5-2所示。
  圖5-2 NO_BORDER模式
  SHOW_ALL模式下會根據實際分辨率進行等比縮放,完全顯示界麵的完整內容,與NO_BORDER模式相反,其會先按照EXACT_FIT模式的縮放規則計算齣寬和高的縮放值,按照*低的縮放值進行等比縮放。由於是按照*小的分辨率進行縮放,所以左右和上下都有可能齣現黑邊,圖5-3右側圖片中的紅點處為OpenGL窗口的原點坐標,如圖5-3所示。
  FIXED_HEIGHT和FIXED_WIDTH模式比較類似,它們會將高度或寬度鎖定,按照高度或寬度進行等比縮放,另外一個方嚮既可能超齣,也有可能留下黑邊。這兩種模式會先按照EXACT_FIT模式的縮放規則計算齣寬和高的縮放值,FIXED_HEIGHT取高度縮放值進行等比縮放,保證設計分辨率的高度剛好鋪滿設計分辨率,FIXED_WIDTH取寬度進行等比縮放,保證設計分辨率的寬度剛好鋪滿設計分辨率。
  圖5-3 SHOW_ALL模式
  5.1.2 坐標編碼
  當我們的程序在不同的分辨率下運行時,setDesignResolutionSize()方法會對整個程序按照適配策略根據設計分辨率和實際分辨率進行縮放。在對坐標進行編碼時,需要使用相對坐標編碼,而根據窗口尺寸可以進行相對坐標的編碼,如希望將一個節點放置在屏幕的正中間,就需要將其坐標的x和y分彆設置為窗口尺寸的寬和高的1/2。相對左下角原點的坐標則可以直接使用絕對坐標,設置相對位置可以使得程序在不同的分辨率下運行,我們的對象都能夠顯示在正確的位置上。
  在使用相對坐標編碼時,Director單例中有幾個方法可以獲取尺寸,下麵瞭解一下這幾個獲取尺寸相關的方法。
  * getWinSize,獲取OpenGL窗口的單位尺寸。
  * getWinSizeInPixels,獲取OpenGL窗口的實際像素尺寸。
  * getVisibleSize,獲取可視窗口的尺寸。
  * getVisibleOrigin,獲取可視窗口左下角坐標的位置。
  另外GLView對象還提供瞭以下兩個接口來獲取其他的尺寸。
  * getFrameSize,獲取設備或窗口的尺寸。
  * getDesignResolutionSize,獲取設置的設計分辨率。
  如圖5-4直觀地演示瞭上麵描述的各種尺寸,WinSize和WinSizeInPixels分彆是當前整個OpenGL窗口的單位尺寸和像素尺寸。VisibleSize和VisibleOrigin可以共同構成當前窗口中實際可見部分內容的矩形範圍,FrameSize為當前窗口或設備的真實尺寸。
  圖5-4 WinSize與VisibleSize
  * WinSize分彆為圖5-4中左右兩圖的紅色框範圍,雖然看上去範圍不同,但這是一個單位尺寸,所以值並沒有變化,也就是原圖尺寸960×640,一般等同於設計分辨率的尺寸,也是OpenGL窗口的單位尺寸。
  * WinSizeInPixels也對應圖5-4兩圖中的紅色框範圍,但這個尺寸為實際占用的像素尺寸,所以在不同分辨率下有不同的值(程序邏輯中使用的坐標是單位尺寸,而非像素尺寸)。
  * VisibleSize錶示可視內容的尺寸,在圖5-4左圖中為紅色框範圍,右圖則為黃色框範圍,也就是可以看到的有內容的顯示區域尺寸。
  * VisibleOrigin錶示可視內容的左下角坐標,分彆是左右圖中左下角的紅點的位置,左圖中OpenGL窗口原點的坐標與紅點重疊,而右圖中OpenGL窗口的原點為紅色框的左下角,VisibleOrigin的Y軸比原點高瞭64個像素。
  * FrameSize為窗口或設備的實際尺寸,也就是圖5-4中兩個窗口的窗口大小1200×640。
  Cocos2d-x推薦使用VisibleSize和VisibleOrigin進行相對位置的計算,就是因為根據它們來計算可以保證我們的對象能夠處於可視範圍中。
  WinSize和(0,0)坐標構成瞭OpenGL窗口,VisibleSize和VisibleOrigin構成瞭可視窗口,可視窗口不會大於OpenGL窗口,因為OpenGL窗口以外的內容都是不可見的!但OpenGL窗口範圍內的對象並不一定可見,如當屏幕窗口容不下OpenGL窗口時。可視窗口可以理解為OpenGL窗口和設備實際分辨率窗口相交的矩形區域。
  5.1.3 OpenGL窗口與可視化窗口
  絕大部分的遊戲都可以使用FIXED_HEIGHT或FIXED_WIDTH模式來實現簡單的分辨率適配,隻需要在背景上將可能有黑邊的內容進行填充即可。這兩種模式與SHOW_ALL有些類似,就是都可能導緻黑邊或超齣,但有一種本質區彆,即它們的OpenGL窗口不同,這對於坐標編碼是有巨大影響的!OpenGL窗口不同,說的是原點位置不同,WinSize、VisibleSize不同。
  在圖5-5中,使用FIXED_HEIGHT和SHOW_ALL模式都是同樣的錶現,左右都會有同樣的黑邊,但FIXED_HEIGHT模式下的OpenGL窗口和可視化窗口對應的是圖5-5中的黃色矩形區域(包括左右的黑邊),而SHOW_ALL模式下的OpenGL窗口和可視化窗口對應的是圖5-5中的紅色矩形區域(不包括黑邊)。
  圖5-5 OpenGL窗口和可視化窗口
  *直觀的錶現就是,在(0,0)的位置創建一個對象,FIXED_HEIGHT模式下會齣現在黃色矩形區域的左下角,而SHOW_ALL模式下會齣現在紅色矩形區域的左下角。SHOW_ALL模式下的黑邊部分是不會齣現任何顯示對象的,因為不在OpenGL窗口中。而FIXED_HEIGHT模式則可以正常顯示,所以隻要背景圖片大一些,將左右的黑邊區域遮住,即可簡單地解決適配黑邊的問題。正是由於這種實現方式,FIXED_HEIGHT和FIXED_WIDTH模式纔可以在背景上對可能有黑邊的內容進行填充來解決黑邊的問題。
  5.1.4 setDesignResolutionSize詳解
  在瞭解瞭適配策略和Cocos2d-x的各種尺寸之後,下麵來進一步瞭解setDesign- ResolutionSize()方法,setDesignResolutionSize()方法中會簡單判斷傳入的設計分辨率的寬度和高度,以及分辨率適配策略,將這些參數保存並調用updateDesignResolutionSize()方法更新分辨率。
  void GLView::setDesignResolutionSize(float width, float height,
  ResolutionPolicy resolutionPolicy)
  {
  CCASSERT(resolutionPolicy != ResolutionPolicy::UNKNOWN, "should set
  resolutionPolicy");
  if (width == 0.0f || height == 0.0f)
  {
  return;
  }
  _designResolutionSize.setSize(width, height);
  _resolutionPolicy = resolutionPolicy;
  updateDesignResolutionSize();
  }
  在updateDesignResolutionSize()方法中,首先根據屏幕尺寸和設計分辨率計算齣x和y方嚮的縮放值,然後根據分辨率適配模式選擇*終的縮放值,計算完縮放值之後,再計算視口的大小。
  void GLView::updateDesignResolutionSize()
  {
  if (_screenSize.width > 0 && _screenSize.height > 0
  && _designResolutionSize.width > 0 && _designResolutionSize.height
  > 0)
  {
  _scaleX = (float)_screenSize.width / _designResolutionSize.width;
  _scaleY = (float)_screenSize.height / _designResolutionSize.height;
  //NO_BORDER模式下取*大的縮放值等比縮放
  if (_resolutionPolicy == ResolutionPolicy::NO_BORDER)
  {
  _scaleX = _scaleY = MAX(_scaleX, _scaleY);
  }
  //SHOW_ALL模式下取*小的縮放值等比縮放
  else if (_resolutionPolicy == ResolutionPolicy::SHOW_ALL)
  {
  _scaleX = _scaleY = MIN(_scaleX, _scaleY);
  }
  //FIXED_HEIGHT模式下取y軸縮放值等比縮放,並將設計分辨率的寬度調整為全屏的
  寬度
  else if ( _resolutionPolicy == ResolutionPolicy::FIXED_HEIGHT) {
  _scaleX = _scaleY;
  _designResolutionSize.width = ceilf(_screenSize.width/_scaleX);
  }
  //FIXED_WIDTH模式下取x軸縮放值等比縮放,並將設計分辨率的高度調整為全屏的
  高度
  else if ( _resolutionPolicy == ResolutionPolicy::FIXED_WIDTH) {
  _scaleY = _scaleX;
  _designResolutionSize.height = ceilf(_screenSize.height/_
  scaleY);
  }
  //計算視口的尺寸,並設置視口的矩形區域
  float viewPortW = _designResolutionSize.width * _scaleX;
  float viewPortH = _designResolutionSize.height * _scaleY;
  _viewPortRect.setRect((_screenSize.width - viewPortW) / 2,
  (_screenSize.height - viewPortH) / 2, viewPortW, viewPortH);
  //重置Director的成員變量來適應可視化矩形
  auto director = Director::getInstance();
  director->_winSizeInPoints = getDesignResolutionSize();
  director->_isStatusLabelUpdated = true;
  director->setGLDefaultValues();
  }
  }
  5.2 分辨率適配經驗
  5.2.1 寬度或高度鎖定
  我們希望所有的機型都能夠很完美地適配,不要拉伸!不要黑邊!FIXED_HEIGHT或FIXED_WIDTH模式是比較容易做到的。
  要做到上麵的要求,需要選取一個範圍,即要適配的分辨率比例的範圍。我們都知道iPhone 5的比例非常長,應該沒有什麼機器比這個比例更長的瞭,所以一般筆者將iPhone 5的比例設置為要適配的極限比例,也就是說,如果有比iPhone 5更長的手機,筆者就基本放棄這個機型瞭。接下來選擇一個*扁的比例,一般在平闆電腦上的比例會更扁一些,縱觀主流的分辨率,基本都在iPhone 5和iPad之間,所以筆者習慣將要適配的比例在iPhone 5到iPad之間(這裏的是以橫屏遊戲為例,如果是竪屏遊戲,隻需要把寬和高對調一下即可)。也就是說,假設選擇固定高度的FIXED_HEIGHT模式,那麼就要選擇一個*寬和*窄的寬度。
  選擇好比例之後,需要好好設計一下遊戲內容,以方便不同分辨率的適配,主要包含遊戲的背景、遊戲的內容區域,以及UI等。
  背景的設計是非常重要的一步,因為背景設計的好壞,直接決定瞭是否有黑邊,以及遊戲內容的布局。首先,背景圖需要有多大?其次,遊戲區域隻能有多大?這些問題需要根據遊戲的內容來設計。
  如果是一個橫屏的鬥地主遊戲,可以將遊戲區域放在遊戲的正中間,遊戲內容可以根據遊戲區域的原點為相對坐標計算,這時候兩邊各有一部分區域是可裁剪的。
  如果是一個竪屏的雷電射擊遊戲,可以將遊戲區域放在正下方,上方是可裁剪區域,敵人從上方齣現,可以將上方的可裁剪區域也納入遊戲區域,敵機根據左上角為原點設置相對坐標。
  如果是一個消除類遊戲,如果是橫屏的,一般把遊戲區域放在正中間,左右兩邊裁剪;如果是竪屏的,一般也把遊戲區域放在正中間,上下兩邊是可裁剪區域。
  5.2.2 計算設計分辨率
  使用FIXED_HEIGHT或FIXED_WIDTH模式結閤一個比較大的背景,一般可以解決大部分遊戲的分辨率適配問題,但如果遊戲背景並不是鎖定寬度或高度的,那麼就需要選擇其他的分辨率適配策略瞭。
  下麵介紹一個簡單的適配示例,如圖5-6所示。首先背景尺寸是1280×800,這個分辨率沒有任何講究,是美工隨便給齣的一個分辨率,是一個足夠大的尺寸,寬度和高度都不進行鎖定,而是根據實際設備的分辨率進行動態調整,這個分辨率盡管不怎麼標準,但還是可以用來完成完美適配。
  圖5-6 分辨率480×320
  遊戲中有兩部分UI,主界麵的菜單麵闆是居中對齊,getWinSize得到的大小的一半即是居中的位置,麵闆設置錨點為(0.5,0.5),並設置居中的位置即可。第二部分UI是頂部的信息欄,信息欄的位置是靠上居中,信息欄設置錨點為(0.5,1.0),然後設置getWinSize的width×0.5f為x坐標,height為y坐標即可。
  在這裏選擇的策略是SHOW_ALL,但是設計分辨率需要動態計算齣來(一般的代碼這裏都會設置一個分辨率),因為要使用好1280×800的背景圖,關鍵有以下幾點:
  * 不拉伸,不留黑邊。
  * 根據手機的分辨率調整可視區域(設置的標準分辨率)。
  * 當目標分辨率比背景還要寬時,把目標分辨率等比縮小,直到分辨率內容全部在可視區域內。
  * 當目標分辨率比背景還要高時,把目標分辨率等比縮小,直到分辨率內容全部在可視區域內。
  * 當目標分辨率比背景小時,把目標分辨率等比放大,直到分辨率內容全部在可視區域內。
  我們的背景分辨率是1280×800,720是筆者自己定義的一個值,因為筆者不希望整個背景太寬,所以進行瞭限製,然後根據實際的分辨率與預期分辨率計算齣期望的高和寬(要麼高變,要麼寬變),代碼如下。
  float height = 800.0f;
  float width = 1280.0f;
  float ratio = sz.width / sz.height;
  float maxratio = width / height;
  float minratio = width / 720.0f;
  if (ratio > maxratio)
  {
  //比*寬的還要寬
  height = width / ratio;
  }
  else if(ratio < minratio)
  {
  //比*窄的還要窄
  width = height * ratio;
  ……

前言/序言

  筆者第一次接觸Cocos2d-x是在2012年初。當時與一位朋友嘗試著製作瞭一款小遊戲,上瞭App Store平颱。在開發中,筆者主要負責遊戲美術,這其實不是筆者的長項,所以該遊戲的美術效果可以用慘不忍睹來形容。雖然那時候的引擎版本隻是1.x,並且開發的遊戲相當失敗,但通過這個遊戲,筆者對Cocos2d-x産生瞭濃厚的興趣。
  其實Cocos2d-x算不上是一款功能超強的遊戲引擎,但它很簡潔、小巧,是一款輕量級的遊戲引擎。大多數程序員實際上更喜歡簡潔的東西,而不是龐然大物。Cocos2d-x簡潔的設計結閤豐富的Demo,讓人可以很快上手,並能使用它開發齣一些簡單的遊戲。其代碼的開源及跨平颱特性也相當誘人。Cocos2d-x本身的這些特性結閤市場的需求,使其很快就成為手遊開發的主流引擎之一。
  在Cocos2d-x剛開始“火”的那一段時間,市麵上關於Cocos2d-x的書籍還十分匱乏。筆者利用業餘時間對該引擎進行瞭深入研究,並使用它開發瞭幾個小遊戲,也總結瞭一些開發經驗。之後一段時間,筆者萌生瞭按照自己的想法寫一本Cocos2d-x遊戲開發圖書的想法。這個想法很快便進入瞭實施階段,但進展遠沒有想象的順利。其原因一方麵是筆者寫作的速度跟不上Cocos2d-x的更新速度,另一方麵是筆者的工作任務也很重,加之寫作期間還開發瞭四五個遊戲作品,這使得本來就不充裕的時間更是捉襟見肘。
  的確,Cocos2d-x的更新非常頻繁,並且引擎更新的同時帶來瞭很多接口的變化,一些代碼甚至需要進行重構。除瞭原有內容的變化改動之外,日益增加的新功能也加大瞭寫作的難度。雖然2013年底筆者已經完成瞭初稿,但是迴過頭來閱讀一遍,發現書稿難以達到自己的預期。於是筆者做瞭一個決定:推翻重寫。在經曆瞭幾個月的重寫之後,Cocos2d-x版本已經升級到瞭3.0。筆者發現又有許多新增功能和新特性需要重新瞭解和學習,於是又經曆瞭一段時間的學習和使用,不得不決定再次對書稿做較大的改動,幾乎又推翻重寫瞭一次。從開始寫作直至完成書稿,整個過程一言難盡,飽含艱辛。在寫作的過程中,Cocos2d-x的書籍如雨後春筍相繼麵市,加上自己工作繁忙,寫作時間有限,一度産生瞭放棄的念頭。但寫一本自己滿意的Cocos2d-x圖書的信念支撐筆者走到瞭*後。當然,這一切對筆者而言很有意義,也很有價值:其一是有機會能和讀者共享自己的心得體會;其二是筆者自己也得到瞭提升。畢竟寫書相對於寫代碼而言需要考慮的東西更多。代碼寫錯還可以改正,而書寫錯則將誤人子弟。
  考慮到讀者群體的不同,筆者將本書分為《基礎捲》和《進階捲》兩個分冊。《基礎捲》主要是為瞭讓讀者夯實Cocos2d-x遊戲開發的基礎知識,適閤沒有經驗的零基礎讀者閱讀。《進階捲》內容全麵,且實用性很強,可以拿來就用,快速解決問題,適閤想要進階學習的讀者閱讀,也可以作為一本解決實際問題的手冊使用。當然,對於想要全麵而深入學習Cocos2d-x遊戲開發的讀者而言,則需要係統閱讀這兩本書。
  本書是《精通Cocos2d-x遊戲開發》的《進階捲》,是一種實用的Cocos2d-x進階圖書,是在筆者完成《基礎捲》寫作之後,用瞭一年多的時間編寫的。這一年多筆者工作繁忙,壓力巨大,幾乎很難在晚上10點之前下班,通常晚上一兩點下班是傢常便飯。*長的加班記錄是到瞭第二天早上9點,也就是正常上班的時間。筆者在這種情況下利用大量業餘時間寫作完成書稿,實屬不易。在寫作過程中,筆者不斷地將之前已完成的書稿中的一些過時內容及難以令自己滿意的內容推翻重寫,力求完美。
  雖然工作繁忙,但筆者在工作中積纍的經驗也成為瞭《進階捲》的寶貴素材。本書介紹瞭豐富的實用技巧,針對開發過程中需要用到的各種技術及可能碰到的各種問題,做瞭全麵而深入的介紹。無論是需要解決問題的讀者還是需要增長經驗的讀者,都能通過閱讀本書有所收獲。本書對讀者的要求略高,需要讀者熟悉Cocos2d-x,*好能有一定的開發經驗。雖然在編寫時筆者盡量做到瞭圖文並茂,讓內容更加通俗易懂,但對於初學者而言還是有一定的難度。所以建議初學Cocos2d-x的讀者先閱讀《基礎捲》,以鞏固好基礎,然後再來閱讀《進階捲》,這樣學習效果會更好。如果是有針對性地解決某一問題,讀者可以閱讀相應章節。歡迎讀者在本書的QQ群中對閱讀中的疑問進行交流和討論。相信本書能夠讓每一個基礎紮實的Cocos2d-x程序員成為一個經驗豐富的Cocos2d-x開發高手。
  本書內容特色
  1.內容新穎,緊跟趨勢
  本書內容新穎,緊跟技術趨勢,以當前主流的Cocos2d-x遊戲引擎版本3.x為主進行講解,在一些必要的地方也兼顧瞭早期的2.x版本的內容,並對新舊版本之間的差異做瞭必要說明,適閤更多的讀者群體閱讀。
  2.覆蓋麵廣,實用性強
  本書專注於解決開發過程中碰到的各種問題,介紹各種常用的開發技術,涵蓋瞭遊戲客戶端開發的大部分問題。
  3.追求原創,與時俱進
  相較於市場上韆篇一律的Cocos2d-x學習教程,本書力求做到與眾不同,與時俱進。書中內容的組織不是堆砌知識點和簡單地翻譯技術文檔,而是從學習和理解的角度齣發,並結閤瞭筆者的實際開發經驗,使用絕大多數章節都是“乾貨滿滿”。
  4.風格活潑,講述準確
  刻闆的風格不是筆者所鍾愛的行文風格。筆者更喜歡用較為簡單和自由的文字和讀 者交流,所以本書閱讀起來並不會枯燥乏味。另外,講解的準確性是對科技圖書的基本 要求,隻有準確的錶達纔能讓讀者不至於齣現太多的理解偏差。所以筆者對書中的錶述經過瞭反復斟酌和提煉,並采用瞭大量例圖、舉例和類比等手法,以便於讀者更容易理解和掌握。
  5.舉一反三,擴展思維
  本書並不滿足於按部就班地介紹功能和API,而是從實際應用齣發,擴散思維,在解決問題的同時,讓讀者思考問題的本質,以更深入地理解所學知識,從而達到舉一反三、學以緻用的效果。雖然本書介紹的是Cocos2d-x,但對技術點的介紹並不局限於Cocos2d-x,對於使用其他引擎的開發者,很多知識都是相通的,即所謂知行閤一,方能真正掌握 知識。
  本書內容及知識體係
  第1篇 實用技術篇(第1~16章)
  本篇深入介紹瞭Cocos2d-x遊戲開發的各種實用技術,涵蓋瞭熱更新、加密解密、骨骼動畫、調試技巧、Shader特效、物理引擎、分辨率適配等實用的技術點。讀者可以根據自己的需求和興趣挑選本篇的章節進行閱讀。
  第2篇 Lua篇(第17~22章)
  本篇介紹瞭在Cocos2d-x中使用Lua開發的技巧,包含瞭Lua的基礎知識,以及在Cocos2d-x中如何使用Lua,分析瞭Quick-Cocos2d-x框架和原生Lua框架的區彆。
  第3篇 網絡篇(第23~31章)
  本篇介紹瞭如何使用Cocos2d-x開發網絡遊戲,包含瞭網絡基礎知識的講解,以及弱聯網、強聯網、局域網這3種網絡遊戲的前後端開發,並提供瞭一個簡易橫版實時對戰遊戲的Demo,相信讀者可以在Demo中更好地瞭解網絡遊戲的開發知識。
  第4篇 跨平颱篇(第32~36章)
  跨平颱開發是Cocos2d-x程序員所必須掌握的知識,初次進行跨平颱移植的讀者難免會遇到不少問題,本篇詳細介紹瞭iOS和Android平颱下的開發和打包,涵蓋瞭豐富的知識點,如證書簽名、ABI、JNI等技術。打包也不是簡單地羅列操作步驟,對打包過程中遇到的各種問題都會追本溯源。另外本篇還介紹瞭如何使用AnySDK在iOS和Android下快速接入第三方SDK。
  本書閱讀建議
  由於Cocos2d-x遊戲引擎是基於C++的,所以一些基礎的C++知識是必須知道的。假如讀者完全沒有任何編程方麵的經驗,則不適閤閱讀本書。
  書中部分章節的內容可能較為深入,如果讀者對這部分內容一時難以理解,可以先跳過而閱讀後續章節,等讀完後續章節再迴頭閱讀這部分內容,也許就豁然開朗瞭。如果是為瞭解決某個問題或者係統學習某個技術點,這種有針對性的閱讀效率會更高。
  本書中的部分例子引用自Cocos2d-x引擎自帶的TestCpp,本書的配套資源中也提供瞭本書的代碼下載方式,讀者在學習的過程中可以參照TestCpp中的例子。
  本書讀者對象
  * 有一定Cocos2d-x遊戲開發經驗的人員;
  * Cocos2d-x開發人員;
  * 想係統學習Cocos2d-x的程序員;
  * 想豐富Cocos2d-x開發經驗的程序員;
  * 想開發跨平颱手機遊戲的人員;
  * 從其他開發轉嚮Cocos2d-x的程序員;
  * 大中專院校的學生和社會培訓的學員。
  本書配套資源獲取方式
  本書涉及的源代碼等資源需要讀者自行下載。請讀者登錄清華大學齣版社網站,然後搜索到本書頁麵,在頁麵上找到“資源下載”欄目,然後單擊“課件下載”或者“網絡資源”按鈕即可。讀者也可以在筆者的github中獲取。
  本書的編寫對筆者而言是一個不小的挑戰,雖然筆者投入瞭大量的精力和時間,但隻怕百密難免一疏。若讀者在閱讀本書時發現任何疏漏,希望能及時反饋給我們,以便及時更正。聯係我們請發郵件至bookservice2008@163.com。
  *後祝各位讀者讀書快樂,學習進步!
  編者著


《深度探索 Cocos2d-x:性能優化與高級特性實戰》 前言:從入門到精通的下一站 Cocos2d-x,作為一款廣受歡迎的開源跨平颱遊戲開發框架,憑藉其強大的功能、靈活的設計以及活躍的社區,吸引瞭無數遊戲開發者。如果您已經掌握瞭Cocos2d-x的基礎知識,並渴望在遊戲開發的道路上更進一步,那麼本書將是您不容錯過的下一站。本書並非對Cocos2d-x基礎概念的簡單復述,而是旨在引領您深入理解其核心機製,解鎖其強大的高級特性,並掌握一係列精妙的性能優化技巧,從而打造齣更具競爭力、更流暢、更具藝術感的遊戲作品。 第一部分:引擎底層剖析與性能優化 在遊戲開發的世界裏,性能是衡量一款遊戲是否成功的關鍵因素之一。尤其是在移動平颱上,有限的硬件資源對遊戲的錶現提齣瞭嚴峻的挑戰。本書的第一部分將帶領您深入Cocos2d-x的引擎底層,從源代碼的視角去理解其工作原理,從而為精細化的性能優化打下堅實的基礎。 第一章:Cocos2d-x渲染管綫深度解析 圖層與繪製順序的奧秘: 詳細講解Cocos2d-x如何管理和渲染場景中的各個節點。我們將深入探討 `CCNode` 的生命周期,理解 `visit` 函數的工作流程,以及繪製命令的生成和提交過程。 OpenGL ES/Metal渲染流程剖析: 揭示Cocos2d-x如何在底層與圖形API(OpenGL ES或Metal)進行交互。我們將講解頂點緩衝區、索引緩衝區、著色器的工作原理,以及紋理加載、混閤模式、深度測試等關鍵概念。 批處理與Draw Call優化: 深入研究Cocos2d-x如何通過批處理來減少Draw Call的數量,從而顯著提升渲染效率。我們將分析 `CCBatchNode` 的作用,理解靜態批處理和動態批處理的適用場景,並學習如何通過閤理組織節點來最大化批處理效果。 著色器編程與材質係統: 探索Cocos2d-x內置的著色器係統,並講解如何編寫自定義著色器來實現獨特的光照、特效和材質錶現。我們將學習GLSL/HLSL語言的基礎,理解uniforms、attributes和varying變量的作用,並演示如何創建例如描邊、發光、卡通渲染等效果。 紋理管理與壓縮技術: 講解Cocos2d-x高效的紋理管理策略,包括紋理圖集的創建、紋理緩存的優化以及不同紋理壓縮格式(如ETC、ASTC)的優劣分析和應用場景。 第二章:內存管理與泄漏檢測 Cocos2d-x的內存分配模型: 深入理解Cocos2d-x內部的內存分配和釋放機製,包括其對象池(Object Pool)的使用,以及如何避免不必要的內存拷貝和頻繁的內存分配。 內存泄漏的常見原因與排查: 係統性地梳理Cocos2d-x開發中常見的內存泄漏場景,例如未及時釋放的定時器、未移除的事件監聽器、未正確處理的引用計數等。 強大的內存分析工具: 學習使用Xcode的Instruments、Visual Studio的內存分析工具等專業工具,對Cocos2d-x項目進行深度內存分析,精準定位內存泄漏點。 內存優化實踐: 掌握多種內存優化策略,例如對象復用、紋理和音頻資源的按需加載與卸載、閤理控製內存峰值等,確保遊戲在長時運行中依然保持穩定。 第三章:CPU性能瓶頸分析與優化 代碼執行效率分析: 學習使用性能分析工具(如Xcode的Time Profiler、Visual Studio的性能剖析器)來識彆CPU密集型代碼段。 算法與數據結構的優化: 針對遊戲中常見的計算密集型場景(如尋路、碰撞檢測、AI決策),分析並優化所使用的算法和數據結構,例如使用更高效的查找算法、空間分割技術等。 多綫程與異步處理: 探討Cocos2d-x中多綫程的應用場景,例如將耗時的計算任務放到後颱綫程執行,以避免阻塞主綫程,保證UI的流暢響應。學習使用GCD(Grand Central Dispatch)等技術。 緩存與預計算: 講解如何利用緩存機製存儲頻繁訪問的數據,以及對復雜計算結果進行預先計算,從而減少運行時開銷。 第四章:物理引擎與碰撞檢測優化 Chipmunk/Box2D深度解析: 深入研究Cocos2d-x集成的物理引擎(Chipmunk或Box2D),理解其剛體、關節、約束等核心概念。 碰撞檢測算法與優化: 學習如何高效地進行碰撞檢測,包括碰撞形狀的選擇、碰撞層(Collision Layers)和碰撞掩碼(Collision Masks)的設置,以及空間分割技術在碰撞檢測中的應用。 性能調優技巧: 掌握優化物理引擎性能的各種策略,例如減少物理對象的數量、簡化碰撞形狀、避免不必要的物理模擬、以及閤理設置物理世界的時間步長。 第二部分:高級特性與跨平颱開發 在打磨好性能這塊基石後,本書第二部分將引導您探索Cocos2d-x更為高級的特性,並深入討論跨平颱開發的各種挑戰與解決方案。 第五章:高級動畫與特效係統 骨骼動畫深入: 學習使用Spine、DragonBones等第三方工具製作精美的骨骼動畫,並詳細講解Cocos2d-x如何集成和控製這些動畫。 粒子係統的高級應用: 探索Cocos2d-x粒子係統的強大功能,學習如何創建逼真且富有錶現力的特效,例如火焰、爆炸、魔法粒子等。我們將深入理解粒子發射器、生命周期、顔色、速度、力的影響等參數。 Shader特效與後期處理: 進一步拓展著色器應用,學習如何實現更復雜的視覺效果,例如屏幕後處理(如模糊、輝光、色彩校正)、體積光、景深等。 自定義動畫控製器: 講解如何構建自定義的動畫控製器,以實現更復雜的動畫邏輯和狀態切換。 第六章:UI係統與交互設計 GUI框架深度剖析: 詳細研究Cocos2d-x的UI係統,包括控件的創建、布局、事件處理等。我們將學習如何使用`ui::Widget`及其派生類構建復雜的用戶界麵。 數據綁定與MVC/MVVM模式: 探討如何將UI與遊戲邏輯分離,采用數據綁定、MVC或MVVM等設計模式,提高代碼的可維護性和可擴展性。 多分辨率適配與國際化: 掌握Cocos2d-x在不同分辨率和屏幕比例設備上的UI適配方案,以及如何實現遊戲的國際化(Localization),支持多國語言。 高級UI動畫與過渡效果: 學習創建平滑、吸引人的UI動畫和頁麵過渡效果,提升用戶體驗。 第七章:網絡通信與多人遊戲開發 Socket通信與協議設計: 深入理解TCP/UDP協議在遊戲中的應用,學習如何使用Cocos2d-x提供的網絡模塊進行客戶端與服務器的通信。 常用網絡庫介紹與使用: 講解並實踐使用如asio、enet等第三方網絡庫,以應對更復雜的網絡需求。 網絡同步與延遲補償: 探討多人遊戲開發中的核心挑戰——網絡同步問題,並學習延遲補償、狀態預測等技術。 網絡安全基礎: 瞭解遊戲開發中常見的網絡安全威脅,並學習一些基本的安全防護措施。 第八章:跨平颱兼容性與打包部署 平颱差異性處理: 深入分析Cocos2d-x在不同平颱(iOS、Android、Windows、macOS、Linux、Web)上的差異,並提供切實可行的兼容性解決方案。 原生平颱特性集成: 學習如何調用平颱特有的SDK,例如訪問設備傳感器、集成第三方廣告平颱、實現應用內購買等。 打包與發布流程: 詳細講解Cocos2d-x項目的構建、打包和發布流程,包括簽名、證書管理、商店上架等環節。 性能監控與AB測試: 介紹如何集成性能監控工具,以及在遊戲發布後進行AB測試,持續優化遊戲體驗。 第三部分:遊戲架構設計與項目實戰 本書的最後部分將聚焦於遊戲架構設計,並將前兩部分的知識融會貫通,通過實際項目演練,幫助讀者構建更健壯、更可維護的遊戲項目。 第九章:可擴展的遊戲架構設計 模塊化與組件化設計: 講解如何將遊戲拆分成獨立的模塊和組件,以提高代碼的復用性和可維護性。 狀態機模式在遊戲中的應用: 學習如何利用狀態機來管理遊戲對象(如角色、UI界麵)的行為和狀態。 事件驅動與消息總綫: 探討事件驅動架構和消息總綫模式,實現模塊間的解耦,降低係統復雜度。 設計模式在Cocos2d-x中的實踐: 深入講解如單例模式、工廠模式、觀察者模式、策略模式等在Cocos2d-x開發中的實際應用。 第十章:實戰項目:一款中型2D RPG遊戲開發 項目需求分析與技術選型: 針對一款典型的2D RPG遊戲,進行需求分析,並基於前文的知識點,選擇閤適的技術棧和架構方案。 核心係統設計與實現: 角色係統: 包括角色屬性、技能、裝備、背包等。 戰鬥係統: 迴閤製或即時戰鬥,技能釋放,傷害計算,狀態效果。 任務係統: 任務發布、追蹤、完成邏輯。 地圖與場景切換: 瓦片地圖加載、NPC交互、場景切換。 UI與用戶體驗: 動態UI布局,流暢的交互反饋。 性能調優與問題解決: 在項目開發過程中,持續關注性能錶現,運用本書教授的優化技巧,解決實際遇到的性能瓶頸。 跨平颱測試與發布: 對最終項目進行多平颱測試,並完成打包發布流程。 結語:持續學習與精益求精 Cocos2d-x是一個不斷發展壯大的技術生態。本書提供瞭一個深入學習和實踐的平颱,但遊戲開發的旅程永無止境。鼓勵讀者在掌握本書內容的基礎上,保持對新技術、新趨勢的關注,積極參與社區交流,不斷提升自己的技術能力,創造齣更多令人驚嘆的遊戲作品。 通過本書的學習,您將不再滿足於僅僅“會用”Cocos2d-x,而是能夠“精通”它,理解其內在的運行機製,運用其高級特性,並能有效地解決開發中遇到的各種復雜問題。祝您在Cocos2d-x的遊戲開發之路上,行穩緻遠,取得更大的成就!

用戶評價

評分

我得說,這本書的價值遠超它的定價。在通讀《精通Cocos2d-x遊戲開發(進階捲)》之前,我對Cocos2d-x的理解可以說是有一些片麵,更多的是停留在界麵搭建和簡單邏輯實現上。而這本書,則像一位經驗豐富的老兵,耐心地帶領我深入到引擎的“心髒”地帶。作者對AI係統設計的講解,尤其是行為樹和狀態機的應用,讓我眼前一亮。我一直認為AI是遊戲體驗的關鍵,但又苦於無從下手,這本書提供的係統性思路和代碼示例,讓我能夠快速地將復雜的AI邏輯融入到自己的遊戲中。此外,關於網絡通信和多人遊戲開發的章節,更是我一直以來非常感興趣但又難以掌握的領域。書中對socket編程、協議設計等方麵的講解,詳細而深入,為我構建多人在綫遊戲奠定瞭堅實的基礎。我不再是那個隻能做單機小遊戲的開發者,而是開始擁有瞭拓展更廣闊遊戲領域的信心和能力。

評分

從技術深度和廣度上來說,《精通Cocos2d-x遊戲開發(進階捲)》無疑是一本值得反復研讀的寶典。這本書的作者似乎對Cocos2d-x的每一個角落都瞭如指掌,並且能夠用一種非常易於理解的方式將其呈現齣來。我尤其推崇書中關於物理引擎集成和自定義渲染管綫的章節。過去,我對物理引擎的瞭解僅限於調用一些基礎API,但這本書讓我明白瞭如何根據遊戲需求來精細地調整物理參數,甚至是如何實現更高級的碰撞檢測邏輯。而自定義渲染管綫的部分,更是讓我看到瞭Cocos2d-x在視覺錶現上的無限可能。書中講解的Shader編寫和後處理效果的實現,讓我能夠輕鬆地為我的遊戲增添獨特的美術風格,這對於追求視覺品質的獨立開發者來說,簡直是無價之寶。總而言之,這本書不僅僅是教學,更是一種思維的啓迪。

評分

坦白講,在閱讀《精通Cocos2d-x遊戲開發(進階捲)》之前,我對Cocos2d-x的一些高級特性,比如自定義組件係統、事件總綫的設計,一直處於模糊的狀態。總感覺在寫代碼時,總有些地方不夠優雅,不夠靈活。《精通Cocos2d-x遊戲開發(進階捲)》就像一把鑰匙,為我解開瞭這些疑惑。書中對代碼組織和設計模式的講解,讓我看到瞭如何構建可維護、可擴展的遊戲架構。作者通過具體的案例,演示瞭如何運用設計模式來解決實際開發中遇到的問題,這對我來說是醍醐灌頂。我尤其喜歡書中關於插件化開發和模塊化設計的討論,這讓我能夠更好地組織代碼,提高開發效率,並且讓項目更容易被多人協作。讀完這本書,我感覺自己對Cocos2d-x的理解不僅僅停留在技術層麵,更是上升到瞭工程化的高度。我開始能夠從更宏觀的角度去思考遊戲開發,並且能夠寫齣更健壯、更優雅的代碼。

評分

如果說市麵上充斥著各種“快速入門”的遊戲開發書籍,那麼《精通Cocos2d-x遊戲開發(進階捲)》就是一股清流,它不屑於那些淺嘗輒止的技巧,而是真正緻力於將讀者帶入Cocos2d-x的“精髓”之中。這本書的編排邏輯非常清晰,循序漸進地引導讀者理解那些看似復雜但至關重要的概念。作者在講解場景管理和節點生命周期時,用瞭很多生動的比喻和圖示,讓我一下子就豁然開朗。尤其讓我印象深刻的是關於資源管理的部分,書中詳盡地介紹瞭如何有效地加載、卸載資源,以及如何避免內存泄漏,這對於大型項目的開發來說,簡直是福音。我之前在項目開發中也遇到過資源管理混亂導緻的問題,讀完這本書後,我感覺自己就像擁有瞭“金手指”,能夠遊刃有餘地處理各種資源問題。而且,作者並沒有迴避那些“難啃”的骨頭,比如多綫程在Cocos2d-x中的應用,他能夠將其講得通俗易懂,並且給齣瞭很多實際的例子,這讓我不再畏懼那些高階話題。

評分

這本書絕對是我近期最滿意的一筆投資!作為一名已經接觸Cocos2d-x一段時間的開發者,我一直渴望能夠深入理解引擎的底層原理,並掌握更高級的遊戲架構設計。之前也讀過一些入門級的教程,但總覺得觸及皮毛,無法真正解決開發中遇到的瓶頸。《精通Cocos2d-x遊戲開發(進階捲)》這本書就像一座寶藏,為我打開瞭新世界的大門。書中對Cocos2d-x核心組件的剖析可謂是鞭闢入裏,從內存管理機製到渲染管綫優化,再到事件分發係統,每個章節都充滿瞭乾貨。我特彆喜歡其中關於性能調優的章節,書中提供的那些具體、可操作的技巧,讓我受益匪淺,解決瞭我之前睏擾許久的卡頓問題。而且,作者在講解時,不僅僅是羅列API,而是深入分析瞭這些API背後的設計思想和適用場景,這對於我理解“為什麼”比“怎麼做”更重要。讀完之後,我感覺自己對Cocos2d-x的掌控力有瞭質的飛躍,不再是簡單地調用函數,而是能夠更自信地構建復雜的遊戲係統。

評分

非常好,喝完以後女朋友成功和我分手瞭,很好的分手禮物

評分

老公買的,有券還是比較優惠,好評

評分

書很實用,看瞭一下很多案例,對於一個初學者來說,我非常喜歡,因為一看書就能運用於現實的,能提高我的興趣

評分

非常有用,看有評價說後麵沒有代碼是瞎說,通篇都有完整代碼,沒中不足的是部分代碼需要自己修改,否則是有bug的,但是改動也不是很大

評分

cocos最近齣的書少瞭,這本書還可以。

評分

看起來還可以,不過還沒來得及看

評分

書是正版,內容也很不錯,可以用來提高對cocos的認識

評分

書中根據案例講解,對新手很有幫助。

評分

作為一個初學者,可以通過這本書學習一些基本知識,但是,本書的內容還是有點老舊。

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有