转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8756467
本文主要侧重于CocosBuilder在cocos2dx中的集成。对CocosBuilder使用的介绍比较简单。详细的使用请参考官方教程;
首先创建Cocos2dx工程“ShootTheApple”,然后在其Resources目录下新建ccb,并在ccb中创建CocosBuilder工程。目录结构如下图:
CocosBuilder工程会产生3类文件,后缀分别为ccbproj, ccb, ccbi(其中前两个文件使工程文件--ccb.ccbproj, apple.ccb。 ccbi文件,是导出的文件,被cocos2dx程序使用,如上图的apple.ccbi);
CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary(); ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader()); /* Create an autorelease CCBReader. */ cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary); /* Read a ccbi file. */ CCNode * node = ccbReader->readNodeGraphFromFile("MainScene.ccbi"); ccbReader->release(); CCScene* scene = CCScene::create(); scene->addChild(node);
CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary(); ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader());IntroLoader对象负责加载相关的类Intro。完整代码如下:
#ifndef ShootTheApple_Intro_h #define ShootTheApple_Intro_h #include "PhysicsSprite.h" #include "CcbBase.h" #include "Playground.h" USING_NS_CC; USING_NS_CC_EXT; class Intro: public CcbBase { public: CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(Intro, create); Intro(){ } virtual ~Intro() { } void btnPlay(cocos2d::CCObject *pSender) { //这个是回调函数, CCDirector::sharedDirector()->replaceScene(PlaygroundLoader::loadCcbi()); } virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) { CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "btnPlay", Intro::btnPlay); // 把btnPlay对应回调函数,btnPlay的设置在“编辑ccb文件--按钮”中介绍了 } }; /* Forward declaration. */ class CCBReader; class IntroLoader : public cocos2d::extension::CCLayerLoader { public: static CCScene* loadCcbi() { CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary(); ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader()); /* Create an autorelease CCBReader. */ cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary); /* Read a ccbi file. */ CCNode * node = ccbReader->readNodeGraphFromFile("MainScene.ccbi"); ccbReader->release(); CCScene* scene = CCScene::create(); scene->addChild(node); return scene; } public: CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(IntroLoader, loader); protected: CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(Intro); }; #endif
#ifndef ShootTheApple_CcbBase_h #define ShootTheApple_CcbBase_h #include "cocos2d.h" #include "cocos-ext.h" #include "Box2D.h" USING_NS_CC; USING_NS_CC_EXT; class CcbBase: public cocos2d::CCLayer , public cocos2d::extension::CCBSelectorResolver , public cocos2d::extension::CCBMemberVariableAssigner , public cocos2d::extension::CCNodeLoaderListener { public: virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) { // do nothing //CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "onPlay", Playground::btnPlay); return NULL; } virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) { // do nothing return NULL; } virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, const char * pMemberVariableName, cocos2d::CCNode * pNode) { // do nothing //CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "apple", CCSprite *, this->apple); return NULL; } virtual bool onAssignCCBCustomProperty(CCObject* pTarget, const char* pMemberVariableName, cocos2d::extension::CCBValue* pCCBValue) { // do nothing return false; } virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader) { // do nothing } }; #endif
在这个demo中,cocosBuilder的版本为Version 3 alpha3,配套的cocos2dx版本为cocos2d-2.1rc0-x-2.1.2;
cocosBuilder的官方:http://cocosbuilder.com/
cocosBuilder官方教程:https://github.com/vlidholt/CocosDragon/blob/master/Tutorial/Tutorial.md
cocos2dx的相关页面:http://www.cocos2d-x.org/news/95