在使用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等等,你們能夠仔細研究研究。