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。
於浩洋