Cocos2d-x 自發佈第一個版本以來,如今使用者已遍佈全球,數不清的採用Cocos 引擎開發的遊戲橫掃各個暢銷榜單。
Cocos2d-x 遊戲引擎的優勢在於「在一個平台下開發,多平台發佈」。
許多知名的開發團隊都已使用Cocos2d-x 開發遊戲。
本書使用Cocos2d-x 的C++ 語言API,並包含100 多個完整的案例專案
原始程式碼,開發者可以快速進行實際專案開發,輕鬆體驗『做中學』
作者簡介:
關東升
知名iOS技術作家,iOS技術顧問,高級培訓講師,行動開發專家。擔任5ICTO社區iOS技術顧問,精通iOS、Android、WindowsPhone及HTML5等行動開發技術。在AppStore上發佈多款遊戲和應用軟體,擅長行動平台的應用和遊戲類專案開發。長期為中國移動研究院、雲南移動、東軟、方正科技、大唐電信、中石油等企業授課。
作者序
歡迎來到Cocos 的開發世界。
Cocos2d-x 自發佈第一個版本以來,歷經4 年的成長,到如今使用者已遍佈全球,數不清的採用Cocos 引擎開發的遊戲橫掃各個暢銷榜單。近兩年,手機遊戲企業在行動網際網路世界的崛起是有目共睹的。企業格局在變化,Cocos2d-x 不改初衷,開放原始碼免費始終如一,便捷高效步步提升,跨平台特性也日益增強。我們的引擎團隊不斷地努力改進,盡可能降低遊戲開發的門檻,讓更多有想法、有創意的朋友,不管是專業還是非專業出身的開發者,都能著手去實現。
Cocos2d-x 遊戲引擎的優勢在於「在一個平台下開發,多平台發佈」。至今,許多知名的開發團隊都已轉為使用Cocos2d-x 開發遊戲了。以這樣為基礎的背景。本書使用Cocos2d-x 的C++ 語言API,並包含了100 多個完整的案例專案原始程式碼,讀者可到本書網站http://www.topteam.cc 下載。
勘誤與支援
網站http://www.cocoagame.net 中建立了一個勘誤專區,及時地把書
中的問題和勘誤回饋給讀者們。如果您在學習過程中發現了問題,可以在網上留言,也可以發送電子郵件到eorient@sina.com,我們會在第一時間回覆。
本書程式碼
本書原作者為中國大陸籍,為求原始程式之完整,特將原書程式碼及繁體化之後的程式碼都放在本公司官網http://www.topteam.cc 上,讀者可下載執行。
在執行繁體中文程式碼時若出現錯誤訊息,可使用原書程式測試。
歡迎來到Cocos 的開發世界。
Cocos2d-x 自發佈第一個版本以來,歷經4 年的成長,到如今使用者已遍佈全球,數不清的採用Cocos 引擎開發的遊戲橫掃各個暢銷榜單。近兩年,手機遊戲企業在行動網際網路世界的崛起是有目共睹的。企業格局在變化,Cocos2d-x 不改初衷,開放原始碼免費始終如一,便捷高效步步提升,跨平台特性也日益增強。我們的引擎團隊不斷地努力改進,盡可能降低遊戲開發的門檻,讓更多有想法、有創意的朋友,不管是專業還是非專業出身的開發者,都能著手去實現。
Cocos2d-x 遊戲引擎的優勢在於「在一個平台下開發,多平台發...
目錄
序
第1 篇 基礎篇
Chapter 01 準備開始
1.1 本書學習路線
1.2 使用實例程式
Chapter 02 Cocos2d-x 介紹與環境架設
2.1 行動平台遊戲引擎介紹
2.2 Cocos2d 家譜
2.3 Cocos2d-x 設計目標
2.4 在Windows 平台下開始開發Cocos2d-x 遊戲
2.4.1 使用Visual Studio 開發工具
2.4.2 下載和使用Cocos2d-x 案例
2.4.3 產生API 文件
Chapter 03 Hello Cocos2d-x
3.1 第一個Cocos2d-x 遊戲
3.1.1 建立專案
3.1.2 專案檔案結構
3.1.3 程式解釋
3.2 Cocos2d-x 核心概念
3.2.1 導演
3.2.2 場景
3.2.3 層
3.2.4 精靈
3.2.5 選單
3.3 Node 與Node 層級架構
3.3.1 Node 中重要的操作
3.3.2 Node 中重要的屬性
3.3.3 遊戲循環與排程
3.4 Cocos2d-x 座標系
3.4.1 UI 座標
3.4.2 OpenGL 座標
3.4.3 世界座標和模型座標
3.5 Win32 平台下設定螢幕
Chapter 04 字串、標籤和選單
4.1 Cocos2d-x 中的字串1
4.1.1 使用const char* 和std::string
4.1.2 使用cocos2d::__String
4.1.3 Win32 平台下中文亂碼問題
4.2 使用標籤
4.2.1 LabelTTF
4.2.2 LabelAtlas
4.2.3 LabelBMFont
4.2.4 Cocos2d-x 3.x 標籤類別Label
4.2.5 標籤中文亂碼問題
4.3 使用選單
4.3.1 文字選單
4.3.2 精靈選單和圖片選單
4.3.3 開關選單
Chapter 05 精靈
5.1 Sprite 精靈類別
5.1.1 建立Sprite 精靈物件
5.1.2 實例:使用紋理物件建立Sprite 物件
5.2 精靈的效能最佳化
5.2.1 使用紋理圖集
5.2.2 使用精靈影格快取
Chapter 06 場景與層
6.1 場景與層的關係 -
6.2 場景切換
6.2.1 場景切換相關函數
6.2.2 場景過場動畫
6.3 場景的生命週期
6.3.1 生命週期函數
6.3.2 多場景切換生命週期
Chapter 07 動作、特效和動畫
7.1 動作
7.1.1 暫態動作
7.1.2 間隔動作
7.1.3 組合動作
7.1.4 動作速度控制
7.1.5 函數呼叫
7.2 特效
7.2.1 網格動作
7.2.2 實例:特效示範
7.3 動畫
7.3.1 頁框動畫
7.3.2 實例:頁框動畫使用
Chapter 08 Cocos2d-x 使用者事件
8.1 事件處理機制
8.1.1 事件分發器
8.1.2 觸控事件
8.1.3 實例:單點觸控事件
8.1.4 實例:使用Lambda 運算式
8.1.5 鍵盤事件
8.1.6 滑鼠事件
8.2 Mouse Down detected, onMouseUp 在層中進行事件處理
8.2.1 觸控事件
8.2.2 實例:單點觸控事件
8.3 加速度計與加速度事件
8.3.1 加速度計
8.3.2 使用事件分發器
8.3.3 使用層加速度計事件
8.3.4 實例:運動的小球
第2 篇 進階篇
Chapter 09 遊戲背景音樂與音效
9.1 Cocos2d-x 中音訊檔案
9.1.1 音訊檔案介紹
9.1.2 Cocos2d-x 跨平台音訊支援
9.2 使用CocosDenshion 引擎
9.2.1 音訊檔案的前置處理
9.2.2 播放背景音樂
9.2.3 停止播放背景音樂
9.2.4 背景音樂播放暫停與繼續
9.3 實例:設定背景音樂與音效
9.3.1 AppDelegate 實現
9.3.2 HelloWorld 場景實現
9.3.3 設定場景實現
Chapter 10 粒子系統
10.1 問題的提出
10.2 粒子系統基本概念
10.2.1 實例:打火機
10.2.2 粒子發射模式
10.2.3 粒子系統屬性
10.3 Cocos2d-x 內建粒子系統
10.3.1 內建粒子系統
10.3.2 實例:內建粒子系統
10.4 自訂粒子系統
10.4.1 程式建立
10.4.2 plist 檔案建立
Chapter 11 圖磚地圖
11.1 地圖效能問題
11.2 Cocos2d-x 中圖磚地圖API
11.3 實例:忍者無敵
11.3.1 設計地圖
11.3.2 程式中載入地圖
11.3.3 移動精靈
11.3.4 檢測碰撞
11.3.5 捲動地圖
Chapter 12 物理引擎
12.1 使用物理引擎
12.1.1 物理引擎核心概念
12.1.2 物理引擎與精靈關係
12.2 Cocos2d-x 3.0 中物理引擎封裝
12.2.1 Cocos2d-x 3.x 物理引擎API
12.2.2 實例:HelloPhysicsWorld
12.2.3 實例:碰撞檢測
12.2.4 實例:使用關節
12.3 Box2D 引擎
12.3.1 Box2D 核心概念
12.3.2 使用Box2D 物理引擎的一般步驟
12.3.3 Visual Studio 2012 下Box2D 開發環境設定
12.3.4 實例:HelloBox2D
12.3.5 實例:碰撞檢測
12.3.6 實例:使用關節
第3 篇 資料與網路篇
Chapter 13 Cocos2d-x 中使用的資料容器類別
13.1 Cocos2d-x 中兩大類 —— Ref 和Value
13.1.1 Cocos2d-x 根類別Ref
13.1.2 包裝類別Value
13.2 Ref 列表容器
13.2.1 __Array 容器
13.2.2 實例:__Array 容器
13.2.3 Vector 容器
13.2.4 實例:Vector 容器
13.3 Ref 字典容器
13.3.1 __Dictionary 容器
13.3.2 實例:__Dictionary 容器
13.3.3 Map 容器
13.3.4 實例:Map 容器
13.4 Value 列表容器 —— ValueVector
13.4.1 ValueVector 常用API
13.4.2 實例:使用ValueVector 容器
13.5 Value 字典容器 —— ValueMap 和ValueMapIntKey
13.5.1 ValueMap 和ValueMapIntKey 常用API
13.5.2 實例:使用ValueMap 容器
Chapter14 檔案存取與資料持久化
14.1 使用FileUtils 存取檔案
14.1.1 Cocos2d-x 中的目錄
14.1.2 實例:檔案讀寫
14.1.3 實例:路徑搜索
14.2 持久化概述
14.3 UserDefault 資料持久化
14.3.1 UserDefault API
14.3.2 實例:儲存背景音樂和音效設定
14.4 屬性清單資料持久化
14.4.1 屬性清單概述
14.4.2 實例:MyNotes
14.4.3 使用__Dictionary 讀寫屬性清單檔案
14.4.4 使用ValueMap 讀寫屬性清單檔案
14.4.5 使用ValueVector 讀取屬性清單檔案
14.5 SQLite 資料庫資料持久化
14.5.1 SQLite 資料庫介紹
14.5.2 Visual Studio 下SQLite 資料庫開發環境設定
14.5.3 實例:重構MyNotes
14.5.4 建立資料庫
14.5.5 SQLite 資料庫管理工具
14.5.6 查詢資料
14.5.7 修改資料
Chapter15 資料交換格式
15.1 CSV 資料交換格式
15.1.1 文件結構
15.1.2 CSV 格式解碼
15.2 XML 資料交換格式
15.2.1 文件結構
15.2.2 SAX 解析
15.2.3 DOM 解析
15.3 JSON 資料交換格式
15.3.1 文件結構
15.3.2 JSON 架構jsoncpp 和rapidjson 比較
15.3.3 實例:rapidjson 解碼
15.3.4 實例:rapidjson 編碼
Chapter16 以HTTP 為基礎的網路通訊
16.1 網路結構
16.1.1 用戶端伺服器結構網路
16.1.2 點對點結構網路
16.2 HTTP 與HTTPS 協定
16.3 使用cURL 開發用戶端
16.3.1 cURL 與libcurl 函數庫
16.3.2 Visual Studio 下libcurl 函數庫開發環境設定
16.3.3 實例:重構MyNotes
16.4 使用HttpClient 開發用戶端
16.4.1 HttpClient API
16.4.2 Visual Studio 下HttpClient 開發環境設定
16.4.3 實例:重構MyNotes
Chapter17 以Node.js 為基礎的Socket.IO 網路通訊
17.1 Node.js
17.1.1 Node.js 安裝
17.1.2 Node.js 測試
17.2 使用Socket.IO
17.2.1 Socket.IO 伺服器端開發
17.2.2 Cocos2d-x 的Socket.IO 用戶端
17.3 實例:Socket.IO 重構MyNotes
17.3.1 Socket.IO 伺服器端開發
17.3.2 Node.js 存取SQLite 資料庫
17.3.3 Cocos2d-x 的Socket.IO 用戶端開發
第4 篇 設計與最佳化篇
Chapter18 Cocos2d-x 中的常用設計模式
18.1 單例設計模式
18.1.1 問題提出
18.1.2 實現原理
18.1.3 應用案例
18.2 委派設計模式
18.2.1 問題提出
18.2.2 實現原理
18.2.3 應用案例
18.3 觀察者設計模式與通知機制
18.3.1 問題提出
18.3.2 實現原理
18.3.3 通知機制
Chapter19 Cocos2d-x 中的記憶體管理
19.1 C++ 記憶體管理
19.1.1 記憶體分配區域
19.1.2 動態記憶體分配
19.2 Ref 記憶體管理
19.2.1 記憶體參考計數
19.2.2 自動釋放池
19.2.3 Ref 記憶體管理規則
19.3 Ref 記憶體管理設計模式
19.3.1 使用靜態建構函數
19.3.2 使用存取器
19.4 其它類型記憶體管理
19.4.1 Value 記憶體管理
19.4.2 Vector 和Map 記憶體管理
Chapter20 效能最佳化
20.1 工具
20.1.1 Xcode 中Instruments 工具使用
20.1.2 使用Windows 工作管理員
20.1.3 Visual Studio 記憶體洩漏檢測工具 —— Visual Leak Detector
20.1.4 左下角的文字是什麼?
20.2 使用SpriteBatchNode 批次繪製
20.3 合理使用快取
20.3.1 場景與資源
20.3.2 快取建立和清除時機
20.4 圖片與紋理最佳化
20.4.1 選擇圖片格式
20.4.2 拼圖
20.4.3 紋理像素格式
20.4.4 紋理快取非同步載入
20.4.5 背景圖片最佳化
20.5 聲音最佳化
20.5.1 聲音格式最佳化
20.5.2 聲音前置處理與清除
20.6 多執行緒平行處理存取
20.6.1 std::thread 多執行緒技術
20.6.2 非同步前置處理聲音
20.7 SQLite 資料庫最佳化
20.7.1 表結構最佳化
20.7.2 查詢最佳化
20.7.3 插入(或刪除)最佳化
20.8 資料交換格式最佳化
第5 篇 平台移植篇
Chapter21 從Win32 到Android
21.1 架設交換編譯和包裝環境
21.1.1 Android SDK 安裝
21.1.2 管理Android SDK
21.1.3 管理Android 開發模擬器
21.1.4 Android NDK 安裝
21.1.5 設定環境變數
21.2 交換編譯和包裝
21.2.1 透過命令列交換編譯包裝
21.2.2 Android.mk 編譯檔案
21.2.3 使用Eclipse 交換編譯包裝
21.3 移植問題整理
21.3.1 中文亂碼問題
21.3.2 SQLite3 資料庫移植問題
21.3.3 JSON 架構rapidjson 移植問題2
21.3.4 libcurl 函數庫移植問題
21.3.5 libNetwork 函數庫移植問題
21.3.6 橫向螢幕與垂直設定問題
Chapter22 從Win32 到Windows Phone 8
22.1 Windows Phone 8 開發環境架設
22.1.1 Windows Phone SDK 8.0 安裝
22.1.2 Visual Studio Express 2012 for Windows Phone 8 安裝
22.2 Cocos2d-x 3.x 的Windows Phone 8 專案
22.2.1 產生專案
22.2.2 執行專案
22.2.3 偵錯專案
22.3 移植問題整理
22.3.1 中文亂碼問題
22.3.2 SQLite3 資料庫移植問題
22.3.3 架構rapidjson 移植問題
22.3.4 libcurl 函數庫移植問題
22.3.5 libNetwork 函數庫移植問題
22.3.6 橫向螢幕與垂直設定問題
Chapter23 從Win32 到iOS
23.1 iOS 開發環境架設
23.1.1 Xcode 安裝和移除
23.1.2 Xcode 操作介面
23.2 從Visual Studio 專案到Xcode 專案
23.2.1 增加原始檔案
23.2.2 增加資源檔
23.2.3 Xcode 中編譯並執行
23.3 移植問題整理
23.3.1 中文亂碼問題
23.3.2 SQLite3 資料庫移植問題
23.3.3 JSON 架構rapidjson 移植問題
23.3.4 libcur 程式庫移植問題
23.3.5 聲音移植問題
23.3.6 使用PVR 紋理格式
23.3.7 橫向螢幕與垂直設定問題
23.4 多解析度螢幕轉換
23.4.1 問題的提出
23.4.2 Cocos2d-x 螢幕轉換
23.4.3 解析度策略
23.4.4 紋理圖集資源轉換
23.4.5 圖磚地圖資源轉換
第6 篇 實戰篇
Chapter24 使用Git 管理程式碼版本
24.1 程式版本管理工具 —— Git
24.1.1 版本控制歷史
24.1.2 術語和基本概念
24.1.3 Git 環境設定
24.1.4 Git 常用指令
24.2 程式託管服務 —— GitHub
24.2.1 建立和設定GitHub 帳號
24.2.2 建立程式庫
24.2.3 刪除程式庫
24.2.4 衍生程式庫
24.2.5 GitHub 協作開發
24.3 實例:Cocos2d-x 遊戲專案協作開發
24.3.1 傳送到GitHub 程式庫
24.3.2 複製GitHub 程式庫
24.3.3 重新獲得GitHub 程式庫
Chapter25 Cocos2d-x 敏捷開發專案實戰 —— 迷失航線手機遊戲
25.1 迷失航線遊戲分析與設計
25.1.1 迷失航線故事背景
25.1.2 需求分析
25.1.3 原型設計
25.1.4 遊戲指令稿
25.2 工作1:遊戲專案的建立與初始化
25.2.1 開發階段1.1:建立專案
25.2.2 開發階段1.2:多解析度支援
25.2.3 開發階段1.3:通用類別與基礎類別維護
25.2.4 開發階段1.4:發佈到GitHub
25.3 工作2:建立Loading 場景
25.3.1 開發階段2.1:增加場景和層
25.3.2 開發階段2.2:Loading 動畫
25.3.3 開發階段2.3:非同步載入紋理快取
25.3.4 開發階段2.4:非同步前置處理聲音
25.4 工作3:建立Home 場景
25.4.1 開發階段3.1:增加場景和層
25.4.2 開發階段3.2:增加選單
25.5 工作4:建立設定場景
25.6 工作5:建立說明場景
25.7 工作6:遊戲場景實現
25.7.1 開發階段6.1:建立敵人精靈
25.7.2 開發階段6.2:建立玩家飛機精靈
25.7.3 開發階段6.3:建立炮彈精靈
25.7.4 開發階段6.4:初始化遊戲場景
25.7.5 開發階段6.5:遊戲場景選單實現
25.7.6 開發階段6.6:玩家飛機發射炮彈
25.7.7 開發階段6.7:炮彈與敵人的碰撞檢測
25.7.8 開發階段6.8:玩家飛機與敵人的碰撞檢測
25.7.9 開發階段6.9:玩家飛機生命值顯示
25.7.10 開發階段6.10:顯示玩家得分情況
25.8 工作7:遊戲結束場景
Chapter26 為迷失航線遊戲增加廣告
26.1 使用GoogleAdMob 廣告
26.1.1 註冊AdMob 帳號
26.1.2 管理AdMob 廣告
26.1.3 AdMob 廣告類型
26.1.4 下載GoogleAdMob Ads SDK
26.2 為迷失航線遊戲Android 平台增加AdMob 廣告
26.2.1 Cocos2d-x 引擎Android 平台下AdMob 開發環境架設
26.2.2 撰寫AdMob 相關程式
26.2.3 交換編譯與包裝執行
26.3 為迷失航線遊戲Windows Phone 8 平台增加AdMob 廣告
26.3.1 Cocos2d-x 引擎Windows Phone 8 平台下AdMob
開發環境架設
26.3.2 撰寫AdMob 相關程式0
26.4 為迷失航線遊戲iOS 平台增加AdMob 廣告
26.4.1 Cocos2d-x 引擎iOS 平台下AdMob 開發環境架設
26.4.2 撰寫AdMob 相關程式
Chapter27 把迷失航線遊戲發佈到Google play 市集
27.1 GoogleAndroid 市集Google play
27.2 Android 裝置測試
27.3 還有「最後一哩路」
27.3.1 增加圖示
27.3.2 應用程式套件裝
27.4 發佈產品
27.4.1 上傳APK
27.4.2 填寫商品詳細資訊
27.4.3 定價和發佈範圍
Chapter28 把迷失航線遊戲發佈到Windows Phone 市集
28.1 微軟Windows Phone 市集
28.2 Windows Phone 8 裝置測試
28.2.1 播放音訊程式當機問題
28.2.2 螢幕解析度寬度和高度相反問題
28.3 還有「最後一哩路」
28.3.1 使用市集測試套件完成「最後一哩路」6
28.3.2 測試應用套裝程式XAP
28.3.3 修改應用程式的基本屬性
28.3.4 設定圖示
28.3.5 市集動態磚和螢幕擷取畫面
28.3.6 修改UI 相關描述資訊
28.3.7 修改包裝資訊
28.4 發佈產品
28.4.1 填寫應用資訊
28.4.2 上傳並描述您的套裝程式
Chapter29 把迷失航線遊戲發佈到蘋果App Store
29.1 蘋果的App Store
29.2 iOS 裝置測試
29.2.1 建立開發者憑證
29.2.2 裝置註冊8
29.2.3 建立App ID
29.2.4 建立設定概要檔案3
29.2.5 裝置上執行
29.3 還有「最後一哩路」
29.3.1 增加圖示
29.3.2 增加啟動介面
29.3.3 修改發佈產品屬性
29.3.4 為發佈進行編譯
29.3.5 套裝應用軟體
29.4 發佈產品
29.4.1 建立應用及基本資訊
29.4.2 應用定價資訊
29.4.3 基本資訊輸入
29.4.4 上傳應用前準備
29.4.5 上傳應用
29.5 常見審核不通過的原因
29.5.1 功能問題
29.5.2 使用者介面問題
29.5.3 商業問題
29.5.4 不當內容
29.5.5 其它問題
序
第1 篇 基礎篇
Chapter 01 準備開始
1.1 本書學習路線
1.2 使用實例程式
Chapter 02 Cocos2d-x 介紹與環境架設
2.1 行動平台遊戲引擎介紹
2.2 Cocos2d 家譜
2.3 Cocos2d-x 設計目標
2.4 在Windows 平台下開始開發Cocos2d-x 遊戲
2.4.1 使用Visual Studio 開發工具
2.4.2 下載和使用Cocos2d-x 案例
2.4.3 產生API 文件
Chapter 03 Hello Cocos2d-x
3.1 第一個Cocos2d-x 遊戲
3.1.1 建立專案
3.1.2 專案檔案結構
3.1.3 程式解釋
3.2 Cocos2d-x 核心概念
3.2.1 導演
3.2.2 場景
3.2.3 層
3.2.4 精靈
...