最小的集成:
需要自定义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 条评论。