內容簡介
《Cocos2d-x 3.x遊戲開發實戰》是一本介紹Cocos2d-x遊戲引擎的實用圖書,全面介紹了最新的Cocos2d-x 3.2遊戲引擎各方面的知識。
《Cocos2d-x 3.x遊戲開發實戰》從內容層次上可分為四個部分。第一部分介紹了遊戲開發的基礎知識、遊戲引擎概念、Cocos2d-x的下載與安裝,以及跨平台開發環境的搭建。第二部分介紹了Cocos2d-x中的核心類、動作、動畫、3D特效、文字、字型、選單、事件處理、UI控制項、聲音和數據存儲等知識。第三部分介紹了Cocos2d-x的粒子系統、Tile地圖、最新的物理引擎、記憶體管理機制。最後一部分詳細介紹了Cocos2d-x官方提供的遊戲開發工具Cocos Studio。
《Cocos2d-x 3.x遊戲開發實戰》針對每一個知識點都通過相應的程式給出了示範,並結合Cocos2d-x自帶的cpp-tests實例進行講解,在總結一些知識點之後還開發了一些小遊戲,目的是讓讀者全面掌握Cocos2d-x的基礎理論和基本使用。
內容提要
《Cocos2d-x 3.x遊戲開發實戰》是一本介紹Cocos2d-x遊戲引擎的實用圖書,全面介紹了最新的Cocos2d-x 3.2遊戲引擎各方面的知識。
《Cocos2d-x 3.x遊戲開發實戰》從內容層次上可分為四個部分。第一部分介紹了遊戲開發的基礎知識、遊戲引擎概念、Cocos2d-x的下載與安裝,以及跨平台開發環境的搭建。第二部分介紹了Cocos2d-x中的核心類、動作、動畫、3D特效、文字、字型、選單、事件處理、UI控制項、聲音和數據存儲等知識。第三部分介紹了Cocos2d-x的粒子系統、Tile地圖、最新的物理引擎、記憶體管理機制。最後一部分詳細介紹了Cocos2d-x官方提供的遊戲開發工具Cocos Studio。
《Cocos2d-x 3.x遊戲開發實戰》針對每一個知識點都通過相應的程式給出了示範,並結合Cocos2d-x自帶的cpp-tests實例進行講解,在總結一些知識點之後還開發了一些小遊戲,目的是讓讀者全面掌握Cocos2d-x的基礎理論和基本使用。
目錄
第1章 Cocos2d-x遊戲引擎介紹 1
1.1 什麼是遊戲引擎 2
1.2 Cocos2d遊戲引擎 2
1.2.1 Cocos2d的發展 2
1.2.2 Cocos2d的特點 4
1.2.3 Cocos2d的現在和未來 4
1.3 Cocos2d-x遊戲引擎 4
1.3.1 選擇Cocos2d-x的理由 5
1.3.2 Cocos2d-x的主要功能 6
1.3.3 Cocos2d-x 3.0版本的各語言最佳化 7
1.3.4 Cocos2d-x 3.0的新特性 8
1.3.5 使用了Cocos2d-x的遊戲 10
1.4 本章小結 11
第2章 跨平台開發環境的搭建 12
2.1 搭建iOS下的開發環境 13
2.1.1 Cocos2d-x的安裝與配置 14
2.1.2 Cocos2d-x項目結構和代碼分析 15
2.2 搭建Windows下的開發環境 25
2.2.1 Cocos2d-x的安裝與配置 25
2.2.2 Cocos2d-x工程目錄和代碼分析 27
2.3 搭建Android下的開發環境 29
2.3.1 軟體的安裝與環境變數配置 30
2.3.2 構建Cocos2d-x工程 31
2.3.3 在Eclipse下運行程式 32
2.4 本章小結 34
第3章 Cocos2d-x的核心類 35
3.1 節點類(Node) 36
3.1.1 Node類的成員變數 36
3.1.2 Node類的函式 38
3.1.3 坐標系 41
示例:測試錨點——AnchorPointTest 43
示例:測試Node類的常用函式——NodeTest 45
3.2 場景類(Scene) 48
3.2.1 TransitionScene場景切換 48
3.2.2 Cocos2d-x支持的場景過渡效果 48
3.3 層類(Layer) 50
3.3.1 Layer類的常用成員變數 50
3.3.2 Layer類的常用函式 50
3.4 導演類(Director) 51
3.4.1 Director導演類常用的成員變數 51
3.4.2 Director導演類常用的函式 52
3.4.3 Director導演類在遊戲初始化時的使用分析 53
3.5 精靈類(Sprite) 54
3.5.1 紋理的相關概念 54
3.5.2 Sprite精靈類的常用成員變數 55
3.5.3 Sprite精靈類的常用函式 55
示例:測試Sprite類的常用函式——SpriteTest 57
3.5.4 SpriteFrame精靈幀類 59
3.5.5 SpriteFrameCache精靈幀快取類 60
3.5.6 SpriteBatchNode精靈表單類 60
示例:測試SpriteFrameCacheTest精靈幀快取類——SpriteFrameCacheTest 62
3.5.7 製作精靈表單 64
示例:測試自己製作的精靈表單——SpriteSheetTest 67
3.6 Cocos2d-x 3.0新的數據結構 68
3.6.1 cocos2d::Vector<T> 69
示例:測試cocos2d::Vector<T>類的常用函式——VectorTest 70
3.6.2 cocos2d::Map<K,V> 73
示例:測試cocos2d::Map<K,V>類的常用函式——MapTest 74
3.6.3 cocos2d::Value 76
示例:測試cocos2d::Value類的常用函式——ValueTest 77
3.7 本章小結 79
第4章 Cocos2d-x的動作和動畫 80
4.1 動作基類Action 81
4.1.1 Action類的常用成員變數 82
4.1.2 Action類的常用函式 82
4.1.3 Action類的子類 82
4.2 示例:測試基本動作——ActionBasicTest 84
4.2.1 顯示、隱藏、閃爍動作 85
4.2.2 淡入淡出動作 87
4.2.3 色彩值漸變動作 89
4.2.4 移動動作 92
4.2.5 跳躍動作 95
4.2.6 縮放動作 98
4.2.7 旋轉動作 101
4.3 示例:測試組合動作——ActionCombinationTest 104
4.4 示例:測試可變速度動作——ActionEaseTest 108
4.4.1 EaseIn、EaseOut和EaseInOut 109
4.4.2 EaseSineIn、EaseSineOut和EaseSineInOut 111
4.4.3 EaseExponentialIn、EaseExponentialOut和EaseExponentialInOut 111
4.4.4 EaseBounceIn、EaseBounceOut和EaseBounceInOut 112
4.4.5 EaseElasticIn、EaseElasticOut和EaseElasticInOut 112
4.5 示例:測試速度動作——ActionSpeedTest 112
4.6 示例:測試跟隨動作——ActionFollowTest 114
4.7 示例:測試延遲動作——ActionDelayTest 116
4.8 示例:測試函式回調動作——ActionCallFuncTest 117
4.9 Cocos2d-x中與動畫相關的類 122
4.10 示例:英雄舞劍動畫 124
4.11 示例:殭屍走路動畫 125
4.12 示例:使用動畫幀緩衝實現動畫 127
4.13 示例:製作精靈表單實現動畫 129
4.14 Cocos2d-x新增的3D特性fbv-conv的用法 132
4.15 示例:Sprite3D創建3D精靈 133
4.16 示例:Animation3D創建3D動畫 135
4.17 本章小結 137
第5章 Cocos2d-x的文本渲染系統和選單 138
5.1 文本渲染相關的類 138
5.2 TTF類型標籤LabelTTF 139
示例:測試LabelTTF類——LabelTTFTest 139
5.3 BMFont標籤類LabelBMFont 141
示例:測試LabelBMFont類——LabelBMFontTest 143
5.4 Atlas標籤類LabelAtlas 144
示例:測試LabelAtlas類——LabelAtlasTest 145
5.5 Cocos2d-x新增的標籤類Label 147
示例:測試Label類——LabelTest 148
5.6 選單類Menu 150
5.7 選單項MenuItem和常用子類 151
5.7.1 標籤選單項(MenuItemLabel) 151
5.7.2 自定義字型選單項(MenuItemAtlasFont) 152
5.7.3 字型選單項(MenuItemFont) 152
5.7.4 精靈選單項(MenuItemSprite) 152
5.7.5 圖片選單項(MenuItemImage) 152
5.7.6 觸發器選單項(MenuItemToggle) 153
示例:測試選單——MenuTest 153
5.8 本章小結 157
第6章 Cocos2d-x的事件處理機制 158
6.1 事件處理機制 158
6.1.1 接收數據(Touch) 159
6.1.2 分發事件(EventDispatcher) 160
6.1.3 處理回響(EventListener) 161
6.2 觸摸事件 162
6.2.1 單點觸摸事件(EventListenerTouchOneByOne) 162
示例:場景優先事件監聽——TouchOneByOneTest 162
示例:滑動螢幕選擇選單——TouchOneByOneTest 167
示例:固定值優先事件監聽——TouchPriorityTest 172
6.2.2 多點觸摸事件(EventListenerTouchAllAtOnce) 176
示例:多點觸摸(縮放功能的實現)——TouchAllAtOnceTest 176
6.3 加速度計事件(EventListenerAcceleration) 180
示例:滾動的小球——AccelerometerTest 180
6.4 按鍵事件(EventListenerKeyboard) 184
6.5 滑鼠事件(EventListenerMouse) 184
6.6 自定義事件(EventListenerCustom) 185
示例:自定義事件處理——CustomTest 186
6.7 本章小結 188
第7章 Cocos2d-x的常用控制項 189
7.1 Cocos2d-x的控制項 189
7.1.1 按鈕類ControlButton 191
示例:測試按鈕——ControlButtonTest 192
7.1.2 拖動滑塊類ControlSlider 196
示例:測試拖動滑塊——ControlSliderTest 196
7.1.3 開關按鈕類ControlSwitch 198
示例:測試開關按鈕——ControlSwitchTest 199
7.2 Cocos Studio中的UI控制項 201
7.2.1 Widget(所有UI控制項的父類) 202
7.2.2 Button(按鈕) 205
示例:測試UI控制項——UITest 205
7.2.3 Text(文本) 211
7.2.4 TextField(文本框) 213
7.2.5 CheckBox(複選框) 217
7.2.6 ImageView(圖片) 219
7.2.7 LoadingBar(進度條) 221
7.2.8 Slider(滑動條) 223
7.2.9 Layout(布局容器) 225
7.2.10 ScrollView(滾動層容器) 231
7.2.11 ListView(列表層容器) 235
7.2.12 PageView(分頁層容器) 238
7.3 本章小結 241
第8章 Cocos2d-x的聲音系統和數據存儲 242
8.1 聲音系統 242
8.1.1 背景音樂和聲音特效 242
8.1.2 CocosDenshion庫 243
8.1.3 SimpleAudioEngine類 243
示例:背景音樂和音效控制——SimpleAudioEngineTest 245
8.2 數據存儲 255
8.2.1 UserDefault類 255
示例:用戶數據存儲測試——UserDefaultTest 257
8.3 本章小結 260
第9章 射擊類遊戲:瘋狂打飛機 261
9.1 遊戲簡介 261
9.2 添加遊戲選單 262
9.3 預載入遊戲資源 268
9.4 玩家飛機飛行效果 273
9.5 玩家飛機Touch實現 276
9.6 背景滾動效果 278
9.7 添加敵機 280
9.8 玩家飛機發射子彈 284
9.9 背景音樂和積分統計 288
9.10 遊戲大Boss 290
9.11 本章小結 296
第10章 粒子系統 297
10.1 粒子系統相關的類 297
10.1.1 ParticleSystem類 297
10.1.2 ParticleSystemQuad類 303
10.1.3 ParticleBatchNode類 303
10.2 粒子系統的使用 303
示例:使用內置的粒子系統——ParticleEffectTest 305
示例:自己定製粒子系統——MyParticleTest 306
10.3 使用Particle Designer工具製作粒子 310
示例:使用plist檔案創建粒子系統——ParticleDesignerTest 312
示例:休閒類遊戲——瘋狂打地鼠 313
10.4 本章小結 337
第11章 瓦片地圖 338
11.1 下載和安裝Tiled地圖編輯器 338
11.2 使用Tiled繪製地圖 339
11.3 Tiled地圖相關的類 345
11.3.1 TMXTiledMap類 345
11.3.2 TMXLayer類 346
11.3.3 TMXObjectGroup類 347
示例:使用Tiled地圖——TileMapTest 348
11.4 本章小結 353
第12章 真實手遊:萌仙 354
12.1 設計地圖場景 354
12.2 載入地圖 355
12.3 地圖的移動 358
12.4 遮擋效果和設定障礙物 362
12.5 尋路算法 365
12.6 隨機出現怪物 375
12.7 玩家和怪物進行戰鬥 380
12.8 本章小結 388
第13章 Cocos2d-x的物理引擎 389
13.1 物理引擎概述 389
13.2 Box2D的核心概念 390
13.3 Box2D中常用的屬性和函式 393
13.4 Box2D示例項目分析 394
13.5 Cocos2d-x和Box2D的整合開發 402
13.6 Box2D開發步驟 404
13.7 Cocos2d-x 3.0中的物理引擎 405
13.7.1 PhysicsWorld類 405
13.7.2 PhysicsBody類 406
13.7.3 PhysicsShape類 408
13.8 使用3.0的物理引擎開發項目 409
示例:測試3.0新增的物理引擎——PhysicsTest 409
13.9 益智類遊戲:憤怒的小鳥 412
13.9.1 開始前的準備工作 412
13.9.2 進度條製作 412
13.9.3 遊戲中的粒子效果 415
13.9.4 遊戲選關操作 420
13.9.5 設計關卡數據 425
13.9.6 設計精靈類 428
13.9.7 遊戲主界面 431
13.9.8 彈弓發射小鳥 435
13.9.9 物理引擎 441
13.9.10 物理碰撞 445
13.9.11 遊戲過關設計 448
13.10 本章小結 452
第14章 Cocos2d-x的記憶體管理 454
14.1 記憶體管理概述 454
14.2 手動記憶體管理 455
14.2.1 對象的引用計數 455
14.2.2 對象所屬權 458
14.2.3 函式中的保留和釋放 461
14.2.4 使用自動釋放池 462
14.2.5 手動記憶體管理總結 465
14.3 自動釋放池 465
14.3.1 Ref的引用計數 465
14.3.2 AutoreleasePool自動釋放池 468
14.3.3 PoolManager自動釋放池管理器 471
14.3.4 create函式 474
14.4 本章小結 476
第15章 塔防類遊戲:保衛公主 477
15.1 設計關卡地圖場景 477
15.2 遊戲選單 479
15.3 選擇關卡 482
15.4 載入關卡數據 489
15.5 準備進入遊戲 497
15.6 隨機出現怪物 503
15.7 建造炮塔 508
15.8 旋轉炮塔 511
15.9 檢測碰撞 515
15.10 遊戲結束 517
15.11 本章小結 520
第16章 Cocos Studio 521
16.1 Cocos Studio概述 521
16.2 Cocos Studio安裝 521
16.3 Cocos Studio特性 523
16.4 Cocos Studio界面 523
16.4.1 界面布局 523
16.4.2 起始頁面 524
16.4.3 渲染面板 524
16.4.4 動畫幀面板 525
16.4.5 屬性面板 526
16.4.6 資源面板 526
16.4.7 控制項面板 527
16.4.8 快捷工具面板 527
16.5 UI編輯器的使用 528
示例:測試UI編輯器——CocosStudioTest 528
16.5.1 按鈕和文本框控制項 528
16.5.2 進度條控制項 535
16.5.3 滑動條控制項 537
16.5.4 層容器控制項 539
16.5.5 滾動層容器控制項 540
16.5.6 分頁層容器控制項 543
16.5.7 UI動畫製作 545
16.6 本章小結 549
附錄 Cocos2d-x中常用的宏 550
前言
移動網際網路熱潮在全世界引起了巨大反響,移動網際網路正在改變著傳統網際網路的格局,全世界的IT公司爭相將業務中心向移動網際網路轉移,移動網際網路業務也成為業內最大的利潤增長點。移動網際網路時代的到來,使得移動套用成為人們生活中的一部分,而遊戲,在移動套用中更是占有舉足輕重的位置。
隨著蘋果iOS系統和iPhone、iPad等一系列產品的發布,隨著Android系統和相應設備的誕生,移動平台從單一的手機發展到平板電腦等多種手持設備上。開發者們需要針對不同平台進行遊戲的開發。Cocos2d-x具有跨平台的特性,只需要編寫一次代碼,就可以無縫地部署在包括iOS、Android、Windows Phone等在內的主流遊戲平台上。在移動終端日趨多樣化的今天,把遊戲部署到多種平台上是遊戲開發的大趨勢,Cocos2d-x的跨平台特性無疑能夠最大限度地減少遊戲開發者重複開發的工作,從而大大提高開發者的開發效率。
Cocos2d-x不僅具有跨平台的特點,它還有眾多的社區支持,而且Cocos2d-x免費開源,簡單易學,非常容易快速上手。現如今,Cocos2d-x已發展為全球占有率第一的手機遊戲引擎,全球份額超過30%,中國份額超過70%。《保衛蘿蔔》《找你妹》《捕魚達人》《我叫MT》《時空獵人》《全民英雄》《大掌門》等60餘款月入千萬的國內手遊,以及國外的《Monster Strike》《勇者斗惡龍:超級光芒》《勇者前線》《Make it rain》《Badland》等多款精品手遊,都是採用Cocos2d-x引擎開發的。
掌握了Cocos2d-x開發技術將帶來更多的就業機會與創業機會,這都值得當下的開發者好好把握。
本書特點
本書是一本介紹Cocos2d-x遊戲引擎的實用圖書,其全面介紹了最新的Cocos2d-x 3.2遊戲引擎各方面的知識。
本書從內容層次上可分為四個部分。
第一部分(第1~2章)為準備篇,為讀者介紹了遊戲開發的基礎知識、遊戲引擎概念、Cocos2d-x的下載與安裝以及跨平台開發環境的搭建。
第二部分(第3~9章)為基礎篇,全面、系統地介紹了Cocos2d-x中的核心類、動作、動畫、3D特效、文字、字型、選單、事件處理、UI控制項、聲音和數據存儲等知識。
第三部分(第10~15章)為高級篇,在前面章節的基礎上,介紹了Cocos2d-x的粒子系統、Tile地圖以及最新的物理引擎。第14章重點分析了Cocos2d-x的記憶體管理機制,幫助讀者在遊戲開發中更好地管理記憶體。
第四部分(第16章)為遊戲開發工具篇,詳細介紹了Cocos2d-x官方提供的遊戲開發工具Cocos Studio,重點介紹了UI編輯器和動畫編輯器的用法,並給出了示例。
本書針對每一個知識點都給出了示範程式,並結合Cocos2d-x自帶的cpp-tests實例進行講解,在總結了一些知識點之後還開發了一些小遊戲,目的是讓讀者全面掌握Cocos2d-x的基礎理論和基本使用。
本書第9章、第12章、第15章為遊戲實戰項目。第9章是一個射擊類遊戲《瘋狂打飛機》;第12章是正在運營的真實手遊《萌仙》中的一個模組;第15章是一個塔防類遊戲《保衛公主》。這些遊戲實戰項目都具有極高的參考價值,希望讀者充分利用本書的實戰案例,真正步入Cocos2d-x遊戲開發的殿堂。
本書並不是一本關於所謂“思想”的書,也沒有一堆“深奧”的新名詞和“高深”的思想,旨在讓你學會實際的Cocos2d-x遊戲開發。本書的特點是操作步驟詳細,編程思路清晰,語言平實易懂。只要讀者認真閱讀本書,並掌握書中知識,就完全可以勝任Cocos2d-x手機遊戲開發的工作。
閱讀本書需要具備一定的計算機知識以及編程功底。Cocos2d-x採用C++編寫,熟練掌握C++語言對於學習本書是很有必要的。限於篇幅,本書並沒有涉及C++語言的知識,請讀者參考相關的書籍和文檔。
本書是針對Cocos2d-x遊戲開發者撰寫的,無論是遊戲開發愛好者、初學者,還是有一定經驗的遊戲開發者,都十分適合閱讀本書。
對於初學者,如果你完全沒有學過C++,建議遵從學習規律,循序漸進,先閱讀C++相關書籍,學習C++語法,再從第1章開始閱讀。
對於有C++基礎但是沒有接觸過Cocos2d-x引擎的讀者,請從第1章開始閱讀。
對於從事過遊戲開發,使用過Cocos2d-x,包括使用過其他Cocos2d引擎的讀者,可以從第3章開始閱讀。
本書適合的讀者
Cocos2d-x初級及中級開發者
了解C++和遊戲開發的讀者
沒有接觸過Cocos2d-x,但有過Cocos2d其他版本開發經驗的開發者
大專院校相關專業的師生
喜歡遊戲並懷揣夢想的有志青年
智慧型手機設備的用戶,想製作一款自娛自樂的遊戲產品
具備其他平台遊戲開發經驗的人
光碟說明
1.光碟內容
光碟中的代碼按章節存放,即第2章所使用的代碼放在codes\02資料夾下,依此類推。
另外,書中每份原始碼也給出了與光碟源檔案的對應關係,方便讀者查找。
本光碟中有的codes資料夾下有15個資料夾,其內容和含義說明如下:
(1)資料夾名02~16對應於書中的章號,即第2章所使用的代碼放在02資料夾下,依此類推。
(2)Cocos2d-x 3.0之後創建新項目的同時會將Cocos2d-x所需的所有庫檔案都複製到新項目中,這樣做的好處是簡化項目配置環境,也就是說不管誰拿到這個項目都可以跑起來,不需要重新去改項目的配置。弊端就是新建一個項目需要更多的磁碟空間,最少200MB。
由於本書的實例過多,出於光碟大小的考慮,所以針對每個項目只提供了Classes和Resources資料夾,Classes中是項目的代碼,Resources中是項目所需的資源檔案,包括圖片、聲音和配置檔案等。讀者需要運行光碟程式時,可先新建一個Cocos2d-x的項目(創建項目的具體步驟在第2章當中有詳細介紹),然後將光碟中對應的Classes和Resources中的檔案複製到項目中就可以運行了。
2.運行環境
本書中的全部代碼可運行在Xcode 5.x、Visual Studio 2012和Eclipse中,並通過iPhone 4、iPhone 4S、iPhone 5、iPhone 5S和部分Android 4.x系統真機測試。
衷心感謝
衷心感謝李剛老師,他是一位非常好的朋友,在本書的創作過程中,他提供了大量切實、有用的幫助。同時也感謝瘋狂軟體教育中心技術團隊一貫的支持。
一直以來,很想感謝我的妻子王丹娜女士,她給了我生活上、精神上無微不至的照顧,並承擔幾乎所有的日常家務,使我能夠心無旁騖地專注於程式的研究和書籍的撰寫。
感謝所有參加瘋狂軟體實訓的學生,他們是本書的“試驗品”,他們所付出的努力證明了本書的價值,他們的反饋讓本書更加實用。
肖文吉
2014年9月