您好,登錄后才能下訂單哦!
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。
于浩洋
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。