1. 程式人生 > >Cocos2d-x 3 X手遊開發例項詳解

Cocos2d-x 3 X手遊開發例項詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

Cocos2d-x 3.X手遊開發例項詳解(最新最簡Cocos2d-x手機遊戲開發學習方法,以熱門遊戲2048、卡牌為例,完整再現手遊的開發過程,例項豐富,程式碼完備,Cocos2d-x作者之一林順和泰然網創始人楊雍力薦

於浩洋 著  

ISBN 978-7-121-23998-4

2014年9月出版

定價:59.00元

356頁

16開

編輯推薦

以Cocos2d-x V3.0為框架全面講解手遊開發的知識和方法

以熱門遊戲2048、卡牌為例,完整再現手遊的開發過程

Cocos2d-x作者之一林順和泰然網創始人楊雍力薦

知識點深入淺出,例項豐富,程式碼完備

線上交流平臺,及時答疑解惑

內容提要

《Cocos2d-x 3.X手遊開發例項詳解》以Cocos2d-xV3.0 系列版本為框架,通過例項講解手機遊戲的開發知識和方法,著重通過例項提高讀者的開發動手能力。涉及的內容包括:環境搭建、交叉編譯以及打包部署;Cocos2d-x資料型別和基本概念的使用,如場景、導演、精靈等;使用Cocos2d-x 建立使用者介面,如文字、選單、滾動框等基本控制元件,以及一些擴充套件控制元件的使用;使用Cocos2d-x 建立動作,比如讓精靈移動、跳躍、旋轉,以及如何建立按順序或同時進行的動作;使用Cocos2d-x 播放、停止、暫停、繼續播放背景音樂和音效;Cocos2d-x 使用的觸控事件機制;在遊戲中儲存資料的幾種方式;使用HTTP、Sockets、WebSockets 進行網路程式設計;在遊戲中使用物理引擎Box2D、使用瓷磚地圖、使用CocosBuilder 製作遊戲介面等;Cocos2d-x 中的紋理和動畫。最後通過兩個完整的遊戲開發例項講解使用Cocos2d-x 開發遊戲的全過程。

《Cocos2d-x 3.X手遊開發例項詳解》例項豐富,程式碼完備,知識點清晰簡潔。《Cocos2d-x 3.X手遊開發例項詳解》所有例項均提供完整程式碼下載,書後附有程式碼清單概要,非常方便讀者查詢使用。此外作者還將Cocos2d-x 3.X 各版本間的區別用例項做了詳細說明,且將在部落格不斷更新。

《Cocos2d-x 3.X手遊開發例項詳解》適合對Cocos2d-x感興趣及有志於學習和從事移動平臺遊戲開發的讀者閱讀參考。

目錄

第1章  準備     1

1.1  Cocos2d-x簡介     1

1.2  Cocos2d-x架構和目錄結構     6

1.3  環境搭建     7

1.3.1  Windows開發環境搭建     7

1.3.2  Mac開發環境搭建     11

1.3.3  建立新專案     12

1.3.4  在Android上除錯專案     14

1.3.5  打包APK檔案     22

第2章  Cocos2d-x常用資料和方法     23

2.1  C++資料型別     23

2.2  Cocos2d-x封裝的資料型別     24

2.2.1  布林型Bool的使用     24

2.2.2  整型Integer的使用     25

2.2.3  浮點型Double、Float的使用     25

2.2.4  字串String的使用     25

2.2.5  陣列Array的使用     26

2.2.6  點Point的使用     27

2.2.7  尺寸Size的使用     28

2.2.8  矩形Rect的使用     29

2.2.9  字典Dictionary的使用     31

2.3  常用巨集定義     32

2.3.1  數學相關巨集的使用     32

2.3.2  斷言巨集CCAsset的使用     33

2.3.3  陣列遍歷巨集CCARRAY_FOREACH和CCARRAY_FOREACH_REVERSE的使用     33

2.3.4  字典遍歷巨集CCDICT_FOREACH的使用     35

2.3.5  物件建立方法巨集CREATE_FUNC的使用     36

2.3.6  屬性定義巨集CC_PROPERTY的使用     37

2.3.7  名稱空間巨集     39

2.4  Cocos2d-x中的座標和座標系     39

2.4.1  OpenGL座標系和螢幕座標系     39

2.4.2  錨點和位置的使用     40

2.4.3  節點座標系和世界座標系的相互轉換     42

第3章  Cocos2d-x核心概念     45

3.1  基礎節點     46

3.1.1  Node簡介     46

3.1.2  Node應用舉例之移除節點     47

3.2  相機     47

3.2.1  相機簡介     47

3.2.2  使用CCCamera迴圈縮放點     48

3.3  導演     49

3.3.1  導演Director簡介     49

3.3.2  Director常用功能舉例     50

3.4  場景     51

3.4.1  場景定義     51

3.4.2  建立顯示戰鬥場景     52

3.4.3  動態切換多個場景     53

3.5  佈景     56

3.5.1  佈景定義     56

3.5.2  使用Layer模擬Windows Phone主介面     57

3.6  精靈     59

第4章  Cocos2d-x使用者介面     61

4.1  文字渲染     61

4.1.1  製作fnt格式字型     62

4.1.2  使用LabelBMFont顯示文字     66

4.1.3  使用LabelTTF顯示文字     67

4.1.4  使用LabelAtlas顯示文字     70

4.2  選單     71

4.2.1  選單和選單項的簡單使用     72

4.2.2  使用選單製作遊戲選單功能     74

4.3  滾動框     80

4.3.1  使用ScrollView顯示多頁內容     80

4.3.2  監聽ScrollView的滾動和縮放事件     82

4.3.3  使用TableView展示多頁內容     83

4.3.4  觸控TableView裡的選單來滾動TableView   86

4.4  擴充套件控制元件     87

4.4.1  滑動條控制元件ControlSlider  87

4.4.2  開關控制元件ControlSwitch  90

4.4.3  取色器控制元件ControlColourPicker  92

4.4.4  電位計控制元件ControlPotentiometer  94

4.4.5  步進器控制元件ControlStepper  95

4.4.6  按鈕控制元件ControlButton  96

4.4.7  Scale9Sprite  99

4.5  使用編輯框製作使用者登入介面     100

第5章  Cocos2d-x動作     105

5.1  動作分類     105

5.2  瞬時動作     106

5.2.1  使用FlipX/FlipY實現X/Y翻轉     106

5.2.2  使用Hide、Show實現隱藏和顯示     108

5.3  延時動作     109

5.3.1  使用MoveTo或者MoveBy實現移動     109

5.3.2  使用RotateTo和RotateBy實現旋轉     110

5.3.3  使用JumpTo和JumpBy實現跳躍     113

5.3.4  使用ScaleTo和ScaleBy實現縮放     114

5.3.5  使用SkewTo和SkewBy實現傾斜變形     115

5.3.6  使用CardinalSplineBy和CardinalSplineTo實現曲線運動     117

5.3.7  使用FadeIn和FadeOut實現漸隱漸出     119

5.4  聯合動作     120

5.4.1  按先後順序執行動作     120

5.4.2  同時執行動作     121

5.4.3  逆向執行動作     122

5.4.4  多次重複執行動作     123

5.4.5  延時執行動作     124

第6章  音訊處理     125

6.1  音訊處理類SimpleAudioEngine  125

6.2  新增控制背景音樂     126

6.2.1  播放背景音樂並調整音量     126

6.2.2  停止播放背景音樂     128

6.2.3  暫停播放背景音樂     128

6.2.4  繼續播放背景音樂     128

6.3  新增控制音樂效果     129

6.3.1  播放音樂     129

6.3.2  停止播放音樂     131

6.3.3  暫停播放音樂     131

6.3.4  繼續播放音樂     131

6.3.5  停止、暫停、繼續播放所有音樂     132

6.4  Cocos2d-x支援的音訊格式     133

第7章  Cocos2d-x瓷磚地圖     135

7.1  什麼是瓷磚地圖     135

7.2  使用Tiled製作瓷磚地圖     137

7.2.1  安裝Tiled  137

7.2.2  製作地圖     138

7.3  在遊戲中使用瓷磚地圖     140

7.3.1  使用TMXTiledMap把瓷磚地圖載入到遊戲中     140

7.3.2  拖曳TMX地圖     141

7.3.3  在TMX地圖中新增並移動精靈     142

7.3.4  讀寫TMX地圖中的圖層和瓷磚     143

第8章  Cocos2d-x中的事件機制     146

8.1  事件和事件排程     147

8.2  觸控事件     149

8.2.1  單點觸控事件的類和方法     149

8.2.2  單擊螢幕移動精靈     150

8.2.3  拖動精靈移動     152

8.2.4  修改監聽器的優先順序     154

8.2.5  多點觸控事件     156

8.2.6  使用多點觸控實現縮放     157

8.3  滑鼠事件     159

8.4  鍵盤事件     159

8.4.1  鍵盤事件介紹     159

8.4.2  例項:把鍵盤輸入內容顯示在螢幕中     160

8.5  加速計     161

8.5.1  加速計介紹     161

8.5.2  例項:利用加速計控制小球移動     162

第9章  Cocos2d-x本地資料儲存     165

9.1  使用UserDefault儲存資料     165

9.1.1  UserDefault介紹     165

9.1.2  使用UserDefault儲存修改資料     167

9.2  檔案     169

9.2.1  檔案處理類FileUtils  169

9.2.2  判斷檔案是否存在     169

9.2.3  設定檔案別名     170

9.2.4  獲取檔案完整路徑     172

9.2.5  設定檔案搜尋路徑     174

9.2.6  根據解析度呼叫不同的資源     175

9.2.7  向檔案中寫入資料     176

9.2.8  從檔案中讀取資料     179

9.2.9  把資料寫入plist檔案     180

9.2.10  從plist檔案讀取資料     182

9.3  SQLite儲存     183

9.3.1  SQLite簡介     183

9.3.2  視覺化管理工具SQLiteStudio  185

9.3.3  使用SQLiteStudio新增資料庫     186

9.3.4  使用SQLiteStudio新增表和資料     188

9.3.5  使用C語言介面操作SQLite資料庫     190

9.3.6  不使用回撥查詢SQLite資料庫     194

第10章  網路程式設計     197

10.1  HTTP實現網路通訊     198

10.1.1  HTTP通訊簡介及常用類     198

10.1.2  GET方式通訊     200

10.1.3  POST方式通訊     203

10.2  Socket實現網路通訊     204

10.2.1  Socket簡介     204

10.2.2  在Cocos2d-x中使用Socket  205

10.3  WebSocket實現網路通訊     209

10.3.1  WebSocket簡介     209

10.3.2  在Cocos2d-x中使用WebSocket  210

第11章  物理引擎Box2D   215

11.1  Box2D簡介     216

11.2  建立Box2D的HelloWorld專案     217

11.2.1  建立一個世界     217

11.2.2  建立一個地面物體     217

11.2.3  建立一個動態物體     219

11.2.4  模擬(Box2D的)世界     219

11.2.5  清理工作     221

11.3  世界b2World  221

11.3.1  b2World簡介     221

11.3.2  世界常用功能     222

11.4  物體b2Body  225

11.4.1  b2Body簡介     225

11.4.2  物體定義     226

11.4.3  建立物體     228

11.4.4  使用物體     229

11.5  固定裝置b2FixtureDef 231

11.5.1  b2FixtureDef簡介     231

11.5.2  建立b2FixtureDef 231

11.6  關節     234

11.6.1  關節簡介     234

11.6.2  關節定義     235

11.6.3  建立關節     235

11.6.4  關節型別和使用關節     236

11.7  接觸     242

11.7.1  接觸簡介     242

11.7.2  接觸監聽器     243

11.7.3  接觸篩選     244

第12章  紋理和動畫     246

12.1  渲染和修改紋理     246

12.1.1  紋理類Texture2D   247

12.1.2  Cocos2d-x支援的紋理格式     249

12.1.3  Cocos2d-x支援的最大紋理尺寸     249

12.1.4  使用RenderTexture儲存截圖     250

12.1.5  圖片抗鋸齒處理方式     251

12.1.6  使用圖片快取     253

12.1.7  製作遊戲載入場景     254

12.1.8  使用TexturePacker製作Sprite Sheet  256

12.2  動畫     258

12.2.1  幀動畫     258

12.2.2  使用幀動畫實現英雄打鬥     259

12.2.3  Sprite Sheet動畫     266

12.2.4  骨骼動畫     268

12.2.5  使用CocoStudio製作骨骼動畫     269

12.2.6  在專案中呼叫CocoStudio製作的骨骼動畫     273

第13章  使用Cocos2d-x製作2048休閒遊戲     275

13.1  準備工作     275

13.2  使用CocoStudio製作UI介面     276

13.3  編寫邏輯程式碼     279

13.3.1  把UI介面新增到遊戲介面中     279

13.3.2  新增獲取分數控制元件並設定分數     281

13.3.3  新增數字方塊類     281

13.3.4  初始化遊戲資料     282

13.3.5  新增按鈕功能     284

13.3.6  新增事件監聽     285

13.3.7  實現方塊上下左右移動     287

13.3.8  新增新的數字塊     290

13.3.9  判斷遊戲是否結束     291

13.3.10  新增遊戲介紹介面     293

第14章  使用Cocos2d-x製作水滸卡牌遊戲     294

14.1  準備工作     294

14.2  定義遊戲資料結構和儲存單例     295

14.3  新增登入介面     299

14.4  新增遊戲主場景     305

14.5  新增遊戲首頁     307

14.6  新增英雄卡牌列表介面     311

14.7  新增戰鬥流程     314

14.8  新增戰鬥介面     319

14.9  終結     323

附錄A  例項程式碼清單說明     324

附錄B  Cocos2d-x 3.X主要版本間的區別     328

精彩節摘

14.7  新增戰鬥流程

戰鬥是卡牌遊戲的靈魂,有了喜歡的英雄,給英雄裝備一套好的裝備,這時不拿出來用用多沒意思啊!戰鬥讓你的英雄久經沙場,變得更強更偉大。該遊戲中的戰鬥流程是,單擊戰爭選單,首先進入世界地圖,如圖14-5所示,單擊世界地圖上的某個勢力範圍,進入該勢力範圍的推圖,再單擊其中一個推圖進入戰鬥場景。

世界地圖通過GameMapLayer實現。在GameMapLayer初始化中,新增一個ScrollView,用來滾動顯示隱藏的地圖:

ui::ScrollView* dragPanel = ui::ScrollView::create();

設定dragPanel的大小為視窗大小:

Size widgetSize =Director::getInstance()->getWinSize();

dragPanel->setSize(widgetSize);

設定dragPanel的內容大小為640×1920:

 Size backgroundSize =Size(640,1920);

dragPanel->setInnerContainerSize(backgroundSize);

設定位置新增到場景中:

dragPanel->setPosition(ccp((widgetSize.width -backgroundSize.width) / 2, (widgetSize.height - backgroundSize.height) / 2 +
(backgroundSize.height - dragPanel->getContentSize().height) / 2));

 

m_pLayer->addChild(dragPanel);

世界地圖是用CocosStudio製作的UI,這裡省略詳細的製作過程,因為上一個例項已經詳細講解了CocosStudio怎製作UI。我們把UI新增到dragPanel中:

Layout* map_root =dynamic_cast<Layout*>(GUIReader::shareReader()->widgetFromJsonFile("GameMapLayer_1.json"));

dragPanel->addChild(map_root);

然後定義一個數組,代表勢力範圍的名稱:

string str[21] ={"yananfu","shijiachun","shimiao","yezhulin","changzhou","hunxian","erlongsan","qingzhou","jiangzhou","liangsan","zhujiazhuang","beijing","chengtou","dongpingfu","dongjing","liangsan","jizhou","shuzhou","hangzhou","guanfu"};

通過一個for迴圈遍歷UI地圖中的Button,併為Button新增名稱和回撥函式:

for (unsigned int i = 0; i<20; ++i)

    {

        Button* button =(Button*)(map_root->getChildByTag(i));

button->setTitleFontSize(32);

button->setTitleColor(Color3B(255,0,0));

button->setTitleText(str[i].c_str());

button->addTouchEventListener(this,toucheventselector(GameMapLayer::buttonTouchEvent));

}

在回撥函式buttonTouchEvent中,先獲取單擊Button的tag和現在的等級:

voidGameMapLayer::buttonTouchEvent(Ref *pSender, TouchEventTypetype)

{

    Size winSize=Director::getInstance()->getWinSize();

    Sprite*bg=Sprite::create("tipbg.png");

    Button*pHome=(Button*)pSender;

int tag=pHome->getTag();

int level=GameData::shareGameData()->mlevel;

switch (type)

    {

case TOUCH_EVENT_BEGAN:

break;

 

case TOUCH_EVENT_MOVED:

break;

 

case TOUCH_EVENT_ENDED:

            ....進行操作....

break;

case TOUCH_EVENT_CANCELED:

break;

 

default:

break;

    }

}

然後在TOUCH_EVENT_ENDED中判斷等級是否大於等於tag*5-10,如果是就進入推圖場景:

if(level>=tag*5-10)

           {

FightLayer *info=new FightLayer(tag);

addChild(info);

            }

這時,執行程式,單擊世界地圖中最上面的勢力,進入推圖場景,如圖14-6所示。

作者簡介

於浩洋:曾就職於阿里巴巴、人人網,從事多年網際網路產品開發工作。守望科技工作室創始人,我博輕遊科技有限責任公司CTO,參與主導多款卡牌手遊的開發與發行,有豐富的手遊開發經驗。

媒體評論

手遊是個很有前景的行業,同時也是個競爭異常激烈的行業。為了在競爭中立於不敗之地,必須有可靠先進的技術和技術人才。此書以Cocos2d-x 3.0為基礎,從入門知識到高階進階,詳細講解了手遊開發的十幾個大模組,每個大模組又包含了許多小的知識點,是提高技術水平不可多得的一本書。

林順

觸控科技高階技術總監,Cocos2d-js作者

本書是由從業多年的開發者於浩洋所著,多年的網際網路巨頭從業經驗使得作者形成了比較紮實的知識體系。書中對基礎知識娓娓道來,同時全書包括多個例項講解。大量的例項,讓所有知識深入淺出,不論你是有從業經驗的中級開發者還是初次使用Cocos2d-x的小白使用者,本書都是不錯的選擇。

楊雍

泰然網創始人,Cocos2d-x技術推廣總監

前言

記得第一次接觸移動網際網路是在2008年左右,當時網際網路應用相當普及,市場競爭進入紅海,絕大多數人認為移動互聯將成為下一個增長點,是很大的藍海,社會將進入3G時代。大到三大運營商和一線網際網路公司,小到小公司和個人開發者都想進入移動互聯,從3G大蛋糕中分到一塊利益。轉眼幾年過去,正如當時預料的那樣,移動互聯已經深入人們的生活當中,4G也悄悄來臨。在移動互聯的發展過程中,蘋果公司起到了不可磨滅的作用,因為它釋出了能承載移動互聯功能的新概念智慧手機iPhone。於是乎,誕生了一大批移動應用和移動遊戲的開發商和個人開發者。其中以《瘋狂的小鳥》為代表的第一批手機遊戲進入人們的視線並大獲成功,之後手機遊戲以比雨後春筍還瘋狂很多倍的速度成長起來。各種型別的遊戲出現在市場中,例如《我叫MT》《大掌門》《找你妹》及騰訊的天天遊戲系列。

在手機遊戲快速成長的過程中,手機遊戲開發框架也跟著發展起來,其中最著名的就是Cocos2d家族,Cocos2d-iphone、Cocos2d-js、Cocos2d-java等,其中Cocos2d-iphone使用數最多。但是Cocos2d-iphone是用Objective-C開發的,只能用於開發iPhone平臺的遊戲,如果想釋出到Android平臺,就要使用另外一種語言,幾乎重寫所有程式碼。於是,中國有位叫王哲的“大神”,使用C++重新實現了一遍Cocos2d-iphone的API,使用C++開發的遊戲不僅效率高,也能釋出到iOS、Android、in、Linux等多個平臺,真正實現了編寫一次、多平臺執行的目的。

Cocos2d-x 3.0系列統一修改了類和介面(比如把類前面的CC去掉),使程式碼更規範、更美觀。3.0系列重寫了紋理渲染方式,不再會產生成倍消耗記憶體的情況,使遊戲執行效率更高、更穩定。本書以Cocos2d-x 3.0版本為基礎,記錄整理了筆者在學習和使用Cocos2d-x中遇到的問題和常用功能,以實踐為主,著重提高讀者的動手開發能力,讓讀者從入門手遊的菜鳥成為遊戲開發界的大神。

本書的主要內容如下。

第1章介紹Cocos2d-x的優缺點和目錄結構,本書案例需要的環境搭建、交叉編譯以及打包部署。

第2章講解了Cocos2d-x中常用的資料型別和方法及一些巨集定義。

第3章講解了Cocos2d-x的基本概念,即基礎節點Node、相機、導演、場景、佈景、精靈。

接著由淺入深,第4章講解了如何使用Cocos2d-x建立使用者介面,如文字、選單、滾動框等基本控制元件,以及一些擴充套件控制元件,如取色器、計步器、複選框等。

之後筆者用很多篇幅在第5章講解了使用Cocos2d-x建立動作的方式,因為動作在遊戲中是必不可少的重中之重,內容包括移動、跳躍、旋轉等簡單動作,以及按順序執行或同時執行的複雜動作。

音樂在遊戲中也不可或缺,好的音效給人耳目一新的感覺,本書第6章講解了使用Cocos2d-x播放、停止、暫停、繼續播放背景音樂和音效。

第7章介紹了瓷磚地圖相關的內容,包括瓷磚地圖的概念、如何製作瓷磚地圖,如何在遊戲中使用、操作瓷磚地圖等。

第8章講解了Cocos2d-x中的事件機制,包括觸控事件、滑鼠事件、鍵盤事件,以觸控事件為主要內容。智慧手機大多數都是觸控式螢幕,要監聽使用者的觸控行為,然後呼叫相應的行為動作,Cocos2d-x提供了一套觸控事件機制,並且3.0系統重寫了該機制,使監聽使用者觸控行為更加方便快捷,同時Cocos2d-x還支援多點觸控機制,增加玩家與手機的互動樂趣。

除此之外,進行遊戲時還產生很多資料,這些資料有時需要儲存下來以便下次使用,所以第9章介紹了多種儲存資料的方式,比如UsderDefault、Plist、本地資料庫SQLite等。

當開發網路遊戲時,客戶端要不斷地跟服務端進行資料交換,第10章講解了如何使用HTTP、Sockets、WebSockets進行網路程式設計。

第11章介紹了物理引擎,它可以使遊戲更加接近現實世界,給玩家更真實的體驗。

第12章講解了紋理和動畫,介紹了紋理的渲染方式並提供了幾個提高渲染效率的方法。動畫部分講解了如何在遊戲中播放幀動畫、plist動畫和骨骼動畫。書中還穿插介紹了一些工具的使用方法,比如使用bitmap font generator製作自定義字型,使用TiledMap Editor製作編輯瓷磚地圖,使用SQLiteStudio管理SQLite資料庫,使用CocoStudio製作編輯UI、動畫、場景等。

第13章講解了休閒遊戲2048的完整開發過程,核心內容包括使用CocoStudio製作UI介面,UI介面與邏輯程式碼的互動,使用UserDefault存取遊戲資料,數字方塊移動、合併的邏輯等。

第14章講解了水滸卡牌遊戲的完整開發過程,挑選了其中幾個典型的功能進行了詳細講解,包括登入介面、公共選單、遊戲首頁、英雄列表、地圖、推圖和戰鬥介面等。本章內容對於遊戲開發人員具有很高的參考價值。

本書所有例項程式碼在附錄A中有詳細說明,讀者可到博文視點網站下載,地址:www.broadview.com.cn/23998。

附錄B詳細介紹了Cocos2d-x 3.X主要版本間的區別,用例項詳細說明各個功能點的使用方法。

最後衷心感謝讀者的支援,如果有問題或想法可以到部落格上留言交流,我的部落格是http://blog.watchtech.net。

 

於浩洋


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述