cocosBuilder是一款很好用的cocos2d辅助开发工具。
网上的教程很多,但新版本的使用略有出入。我记一下。
下载下了工具后,新工程,File->New->New Project,一般后提示一个出错消息:too many directories.
选择:File->update File in directory,把工程路径选到xcode工程的Resource目录。
按照网上教程建好后。
选择File->publish,把生成的ccbi文件拷贝到工程。
使用如下代码使用。
CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
ccNodeLoaderLibrary->registerCCNodeLoader(“TestCocosBuilder”,TestCocosBuilderLoader::loader());//这个是用来响应事件的,如果只是显示可以不用这个
//创建一个自动释放的CCB读取类(CCBReader头文件"cocos-exh")
cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
ccbReader->autorelease();
//读取ccbi文件获取根节点
CCNode * node = ccbReader->readNodeGraphFromFile("helloworldlayer.ccbi");
//将根节点CCLayer加入到场景中
CCScene * scene = CCScene::create();
if(node != NULL) {
scene->addChild(node);
}
//切换到cbbi生成的场景
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(0.5f, scene, ccc3(0, 0, 0)));
TestCocosBuilderLoader类,加载使用
#ifndef CocosBuilderTest_TestCocosBuilderLoader_h #define CocosBuilderTest_TestCocosBuilderLoader_h #include "TestCocosBuilder.h" class CCBReader; class TestCocosBuilderLoader : public cocos2d::extension::CCLayerLoader { public: CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(TestCocosBuilderLoader, loader); protected: CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(TestCocosBuilder); }; #endifTestCocosBuilder类,响应事件
#ifndef __CocosBuilderTest__TestCocosBuilder__ #define __CocosBuilderTest__TestCocosBuilder__ #include "cocos2d.h" #include "cocos-ext.h" using namespace cocos2d; using namespace extension; class TestCocosBuilder:public cocos2d::CCLayer , public cocos2d::extension::CCBSelectorResolver , public cocos2d::extension::CCBMemberVariableAssigner { public: CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(TestCocosBuilder, create); //CCBSelectorResolver重写函数如下 virtual SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName); virtual SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName); //CCItemImage 回调函数 void menu_backfunc(cocos2d::CCObject * pSender); //CCBMemberVariableAssigner重写函数如下 virtual bool onAssignCCBMemberVariable(CCObject * pTarget, cocos2d::CCString * pMemberVariableName, CCNode * pNode); CCLabelTTF* cbbiTTF; }; #endif /* defined(__CocosBuilderTest__TestCocosBuilder__) */
#include "TestCocosBuilder.h" SEL_MenuHandler TestCocosBuilder::onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName){ //将ccbi中的“menu_backfunc”回调函数映射成本类的menu_backfunc函数 CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "menu_backfunc", TestCocosBuilder::menu_backfunc); return NULL; } SEL_CCControlHandler TestCocosBuilder::onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName){ return NULL; } bool TestCocosBuilder::onAssignCCBMemberVariable(CCObject * pTarget, cocos2d::CCString * pMemberVariableName, CCNode * pNode){ //将ccbi中的“cbbiTTF”映射成本类的cbbiTTF对象 CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "cbbiTTF", CCLabelTTF *, this->cbbiTTF); return false; } void TestCocosBuilder::menu_backfunc(cocos2d::CCObject * pSender){ if(cbbiTTF!=NULL){ cbbiTTF->setString("MenuItemImage 事件被触发");