【cocos2dx開發技巧10】cocosStudio的整合以及c++11的新特性,cocos2dx官網

來源:互聯網
上載者:User

【cocos2dx開發技巧10】cocosStudio的整合以及c++11的新特性,cocos2dx官網

轉寄,請保持地址:http://blog.csdn.net/stalendp/article/details/38880997

很長時間沒有碰cocos2dx了,最近又用起來了,花了好幾個小時重新熟悉了一下,發現很多新的特性值得用來寫文章。好吧,先從最常用的開始。最近用windows,使用cocosStudio,就從這個開始吧,順帶介紹一下工程的建立,以及c++11的特性。以前開發使用cocosBuilder開發介面(相關整合見這篇文章)。

準備工作

1)準備NDK、andrdoid-SDK,VisualStudio等工具。並設定環境變數NDK_ROOT,ANDROID_SDK_ROOT,Path等

2)安裝Python 2.7.x (不是3.x.x);

3)下載cocos2d-x-3.2壓縮包

建立遊戲項目

開啟命令列工具,切換到cocos2d-x-3.2目錄下,執行命令:

1)  setup.py, 用來設定環境變數

2)cocos new circleTheLine -p com.evilgame.circleTheLine -l cpp -d x:\your\project\path , 用來建立項目

在2)命令執行完後, x:\your\project\path目錄下,會出現如下內容;點擊proj.win32下的visualStudio工程,就可以開啟項目。

使用CocosStudio建立介面

我這裡只是做一個頁面,所以只選擇UI Editor來製作。


製作的介面如下:


然後把該項目匯出,得到NewUi_1.json,test.png, test.plist檔案。把這三個檔案拷貝到遊戲根目錄下的Resources目錄下。

整合cocos2dx

現在的目標是,當使用者點擊“測試按鈕”後,改變介面上的文字。

1)加入相應的lib工程。

因為cocosStudio的使用,需要依賴於libCocosStudio, libGUI, libExtensions三個庫,具體路徑如下(D:\Program Files\cocos2d-x-3.2\為根目錄)

libCocosStudio D:\Program Files\cocos2d-x-3.2\cocos\editor-support\cocostudio
libGUI D:\Program Files\cocos2d-x-3.2\cocos\ui\proj.win32
libExtensions D:\Program Files\cocos2d-x-3.2\extensions\proj.win32

需要修改visualStudio,對它們進行引用,具體如下:

1a) 把上面的三個工程加入“解決方案”中。

右擊項目,在彈出的菜單中選擇 添加/現有項,如下:


1b) 添加引用依賴:(解決連結的問題)

右擊項目,在彈出的菜單中選擇 屬性,在彈出的對話方塊中做如下操作:


1c)添加標頭檔:(解決編譯的問題)

#include "cocostudio/CocoStudio.h"#include "ui/CocosGUI.h"USING_NS_CC;using namespace cocostudio;using namespace ui;
注意,命名空間ui,其實是cocos2d的子命名空間;所以需要寫在USING_NS_CC下面,或者寫成:

using namespace cocos2d::ui;

如果上面路徑無法找到,請按照下面的方法,查看是否包含了相應的路徑。

右擊項目,在彈出的菜單中選擇 屬性,在彈出的對話方塊中做如下操作:


其中@{EngineRoot}是宏變數,用來指定cocos2dx的根目錄(我這裡是D:\Program Files\cocos2d-x-3.2\);標頭檔就是相對於這裡的“附加元件封裝含目錄”的設定的。所以做相應的調整,確保路徑正確。2)顯示該介面:
        node = GUIReader::shareReader()->widgetFromJsonFile("NewUi_1.json");        // 這裡的node是類變數if (node == nullptr){return true;}this->addChild(node);// 當然讀取情境檔案,可以用以下的語句// CCNode *pNode = SceneReader::sharedSceneReader()->createNodeWithSceneFile("SceneEditorTest/SceneEditorTest.json"); 
3)綁定按鈕事件:

Button* button = static_cast<Button*>(node->getChildByName("btnTest"));button->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type) {if (type == Widget::TouchEventType::ENDED) {// 注意node的生命週期的問題TextBMFont* nn = static_cast<TextBMFont*>(node->getChildByName("displayMsg")); nn->setString("msg changed!!");}});
上面的代碼使用了C++11的lambda運算式特性,下面將做介紹。

C++11特性--lambda運算式c++終於可以使用lambda運算式了!這將為編碼帶來極大的方便,上面的例子代碼,很好地體現了。1) 三種方法的對比:寫法1(未用lambda運算式):
auto closeItem = MenuItemImage::create(                                          "CloseNormal.png",                                          "CloseSelected.png",                                          CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));                                            void HelloWorld::menuCloseCallback(Object* sender)  {      Director::getInstance()->end();  }  
寫法2(lambda函數指標):
auto callEnd = [](Object* sender)  {      Director::getInstance()->end();//直接在這裡添加按鈕要調用的代碼   };    auto closeItem = MenuItemImage::create(                                          "CloseNormal.png",                                          "CloseSelected.png",                      allEnd);     
寫法3(lambda運算式):
auto closeItem = MenuItemImage::create(                                          "CloseNormal.png",                                          "CloseSelected.png",                                          [](Object* sender)                      {                          Director::getInstance()->end();//直接在這裡添加按鈕要調用的代碼                      });  
如果要設定運算式能夠訪問外部變數,可以在 [] 內寫入 & 或者 = 加上變數名,其中 & 表示按引用訪問,= 表示按值訪問,變數之間用逗號分隔,比如 [=factor, &total] 表示按值訪問變數 factor,而按引用訪問 total。如果是引用的話, 需要注意該對象的生命週期,回呼函數的生命週期和控制項相同。另外更多技術分享和討論,請加群:385121586
參考:cocosStudio官方教程:http://upyun.cocimg.com/CocoStudio/helpdoc/v1.0.0.0/zh/index.htmlC++11特性:http://blog.csdn.net/star530/article/details/19913611
官方例子中的ExtensionTest/CocoStudioSceneTest/SceneEditorTest.cpp

問java轉cocos2dx遊戲開發的難度、學習曲線?

風險肯定是有的~轉過來又倆問題,一個是沒做過遊戲~整個遊戲邏輯可能有問題~另一個是c++不熟悉,工程項目稍微大一點的話怕記憶體泄露~cocos2d-x肯定是用來做手機遊戲的~萬一有泄露可能整個程式直接崩了~主要怕這個
 
cocos2dx的android開發遇到的問題

不懂你具體什麼情況,我的都是可以正常匯入的。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.