使用CocosBuilder2.1結合cocos2d-x2.0.3建立動畫場景


原文地址:http://article.ityran.com/archives/2140

本爲由泰然教程組成員 淺底 原創,做爲一位經驗豐富的遊戲開發人員,此次淺底將CocosBuilder經驗分享給你們,但願你們喜歡,歡迎拍磚!!轉載請註明出處!!

在使用Cocos2d框架開發iOS遊戲的時候,對於每個場景(CCScene)的編輯是比較麻煩的,好在有外國的牛人提供了很是棒的場景編輯器—-CocosBuilder。node

做爲可視化編輯的補充,cocosBuilder成爲cocos2D-iphone和cocos2D-x最流行的可視化編輯器。cocos2D-x從2.0版本開始支持cocosBuilder,一樣cocosBuilder也是2.0版本與之對應 , 能夠經過cocosBuilder的官方網站http://cocosbuilder.com/下載cocosBuilder 。程序員

1、 下載cocosBuilder 2.1和cocos2d-x 2.0.3版本。編程

2、 把本身想製做動畫的資源放在一個文件夾中,命名爲ccb,把cocosbuilder publish的文件,建立另外一個文件夾,命名爲ccbPublish。(文件夾命名隨意)xcode

如上圖。app

注:此處講解將cocosBuilder和cocos2d-x分開來介紹,通常可讓美工人員掌握cocosBuilder,提供給編程人員ccbPublish文件夾,編程人員就能夠直接讀取動畫文件便可,極大的緩解編程人員的工做(主要是程序員的審美木有人家的好)。框架

若是本身想又製做動畫,又用代碼來讀取,下面會提到辦法。iphone

3、 打開cocosBuilder,建立工程。編輯器

File-New-New Project函數

選擇ccb文件夾學習

將其命名爲CCBTest,點擊Save。不用管自動生成的hellococoBuilder。

4、設置工程

File-Project Setting

若是想在本身的Xcode中即時看到效果,此處的路勁能夠選擇爲xcode工程中的resources文件夾。這就是上面提到的解決方法。

其餘設置如圖所示。

圖中的幾個選項,看英文就知道意思了。不過這裏用不到。

5、建立文件File-New-New File,

選擇iPhone4的橫屏

而後

保存在ccb文件夾中。至此完成了初步的建立的工做。

6、建立動畫

在此以前,

這樣設置一下,能夠減小陰影對本身視覺的影響。

熟悉一下

點擊就添加一個相應的東西,以後在右側會有相應的屬性設置

相似xib,相信大家應該很熟悉

添加精靈以後,在相應的時間點上點擊以下:

至少添加兩個關鍵幀,而且是相同的。並且能夠不一樣的動做(關鍵幀)同時運動。

7、保存動畫,Publish動畫。

經常使用功能鍵,保存是command+s,發佈是command+option+S,也能夠用菜單中的選項。

8、在Xcode中添加ccbPublish裏面的文件,使用cocos2d-x代碼讀取ccbPublish中的ccbi文件。添加文件時須要注意路徑必定要和cocosBuilder中的路徑一致,(xcode中通常來講都是bundle路徑)在工程中添加按通常的步驟來便可,若cocosBuilder文件夾中含有其餘文件夾對應的是Xcode添加問價夾中,不然會致使程序找不到相應的資源,程序崩潰。

2、程序讀取cocosBuilder建立的ccbi動畫文件

在程序中使用時,能夠經過CCLayerLoader類註冊CCNodeLoaderLibrary,再經過CCNodeLoaderLibrary類定義CCBReader類的實例,再經過readNodeGraphFromFile函數得到父節點,並把父節點加入到場景中,便可以顯示出相應的場景。

一、 建立一個cocos2d-x工程。刪除自動建立的helloworld文件,建立MainScene文件。

二、 在MainScene文件中讀取

.h文件

#ifndef _MAIN_SCENE_h

#define _MAIN_SCENE_h

#include "cocos2d.h"

#include "cocos-ext.h"

class CCBReader;

USING_NS_CC;

USING_NS_CC_EXT;

class MainScene

: public CCLayer

, public cocos2d::extension::CCBSelectorResolver

, public cocos2d::extension::CCBMemberVariableAssigner

, public cocos2d::extension::CCNodeLoaderListener{

public:

CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(MainScene, create);

static CCScene* scene();

MainScene();

virtual ~MainScene();

void openTest(const char * pCCBFileName, const char * pCCNodeName = NULL, cocos2d::extension::CCNodeLoader * pCCNodeLoader = NULL);

#pragma mark -

#pragma mark Loader Function

virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName);

virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName);

virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, cocos2d::CCString * pMemberVariableName, cocos2d::CCNode * pNode);

virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader);

};

#pragma mark -

#pragma mark MainSceneLoader

class MainSceneLoader:public cocos2d::extension::CCLayerLoader {

public:

CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(MainSceneLoader, loader);

protected:

CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(MainScene);

};

#endif

.cpp文件

#include "MainScene.h"

#include "AppController.h"

CCScene* MainScene::scene(){

CCScene *scene=CCScene::create();

cocos2d::extension::CCNodeLoaderLibrary *ccNodeLoaderLibrary=cocos2d::extension::CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();

ccNodeLoaderLibrary->registerCCNodeLoader("MainScene",MainSceneLoader::loader());

cocos2d::extension::CCBReader *ccBReader=new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);

//屏幕適配

cocos2d::CCSize size= CCEGLView::sharedOpenGLView()->getVisibleSize();

CCLog("cpp surface size height == %f",size.height);

CCNode * node;

if (size.height==480) {

node = ccBReader->readNodeGraphFromFile("test.ccbi", scene);

}else{//iPhone5,能夠爲不一樣的設備製做不一樣的ccbi文件。同時建立多個畫布而後製做,尚未去研究。。。

node = ccBReader->readNodeGraphFromFile("test.ccbi", scene);

}

if(node!=NULL){

scene->addChild(node);

}

return scene;

}

MainScene::MainScene(){

}

MainScene::~MainScene(){

}

void MainScene::openTest(const char * pCCBFileName, const char * pCCNodeName, cocos2d::extension::CCNodeLoader * pCCNodeLoader){

//

}

SEL_MenuHandler MainScene::onResolveCCBCCMenuItemSelector(CCObject * pTarget,CCString * pSelectorName){

//Bind Menu Events,綁定一個menu,點擊方法是press,如下同理

CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "press",MainScene::press);

return NULL;

}

SEL_CCControlHandler MainScene::onResolveCCBCCControlSelector(CCObject * pTarget, CCString * pSelectorName){

//Bind CCControl Events

return NULL;

}

bool MainScene::onAssignCCBMemberVariable(CCObject * pTarget, CCString * pMemberVariableName, CCNode * pNode){

//Bind variables

CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "ATM", CCSprite *, this->ATM);

return false;

}

void MainScene::onNodeLoaded(CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader){

//檢測scene

CCLOG("MainScene loading.....successed!") ;

}

三、 在appDelegate.cpp中將helloworld修改掉,

CCScene *pScene = MainScene::scene();

完成以上過程既能夠讀取本身建立的動畫了。

這些是比較基礎一些的,cocosBuidler也能夠像xib同樣綁定事件,對象等。上面的代碼中我也有註釋,若否則讀取ccbi文件只須要CCScene* MainScene::scene()這個函數便可。

還也能夠添加粒子效果,能夠製做骨骼動畫,能夠爲遊戲製做菜單等等一系列的功能。

Cocos2d-x下載的工程中自帶有一個TestCpp的工程,是咱們學習cocos2d-x的很是好的源代碼。其中,在

這裏面有製做的很是好的例子,把個不一樣的test,Animation,button,label,menu,particleSystem,Scrollview,sprite,testHeader等等,你們能夠仔細研究研究。

相關文章
相關標籤/搜索