cocos2dx中集成ccbuilder

最小的集成:

需要自定义loader:

class MyCustomCCLayerLoader:public CCLayerLoader{

public:

CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(MyCustomCCLayerLoader, loader);

protected:

CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(HelloLayer); // 这里添加与ccb中定义对应的类

};

加载ccbi代码:

CCNodeLoaderLibrary* library=CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();

library->registerCCNodeLoader(“HelloLayer”, MyCustomCCLayerLoader::loader());

CCBReader* reader=new CCBReader(library);

reader->autorelease();

pDirector->runWithScene(reader->createSceneWithNodeGraphFromFile(“HelloCocosBuilder.ccbi”));

 

自定义的Layer:

class HelloLayer:public CCLayer,public CCBSelectorResolver,public CCBMemberVariableAssigner,public CCNodeLoaderListener

{

public:

CCLabelTTF* testTTF;

public:

// 点击处理

virtual void pressedClickme(CCObject* target,CCControlEvent* event);

// 这里也没有被调用,原来需要CCNodeLoaderListener,当从ccb文件创建后被调用

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

// 设置menuItem的调用

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

// 设置button的调用

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

// 设置属性

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

// 这是做什么用的?

virtual bool init();

// 创建自动释放的本类对象

CREATE_FUNC(HelloLayer);

// 手工释放掉ccb绑定的对象

~HelloLayer(){

CC_SAFE_RELEASE(testTTF);

}

};

void HelloLayer::pressedClickme(CCObject* target, CCControlEvent *event){

CCLog(“clicked pressed click me”);

CCLog(“ttf text:%s”,testTTF->getString());

}

bool HelloLayer::init(){

if(!CCLayer::init()){

CCLog(“invoke hello layer init return false”);

return false;

}

CCLog(“invoke hello layer init return true”);

return true;

}

 

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

//CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, “pressedClickme”, HelloLayer::pressedClickme);

return NULL;

}

 

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

CCB_SELECTORRESOLVER_CCCONTROL_GLUE(this, “pressedClickme”, HelloLayer::pressedClickme);

return NULL;

}

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

CCB_MEMBERVARIABLEASSIGNER_GLUE(this, “testTTF”, CCLabelTTF*, testTTF);

return false;

}

 

 

void HelloLayer::onNodeLoaded(CCNode * pNode, CCNodeLoader * pNodeLoader){

CCLog(“on node loaded”);

}

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>