cocos2d-x版本2.1.4
Cocosbuilder是一个图形化编辑器,用于cocos2d-x和cocos2d-iPhone使用。通过树型结构管理各类节点,在Cocosbuilder里可以创建:
CCNode、CCLayer(四种)、CCSprite(普通和九宫格)、CCControler、CCLabel(两种)、CCMenu(两种)等。
根据类之间的关系,可以任意组织父节点和子节点。
---------------------------------------
1、在GameLayer.h中定义布景层
class GameLayer : public CCLayer, public CCBMemberVariableAssigner, public CCBSelectorResolver
CCBmemberVariableAssigner是让类覆盖onAssignCCBMemberVariable(),这个是用来绑定变量与ccb文件中元素相对应的函数。
CCBSelectorResolver是让类覆盖onResolveCCBCCMenuItemSelector()、onResolveCCBCCControlSelector()、onResolveCCBCCCallFuncSelector()。这是绑定ccb中的菜单、控制按钮点击操作和时间轴的回调函数。(ps:中间那个可以看Test中的CocosBuilderTest)
2、在GameLayer.h中定义ccb文件的加载类GameLayerLoader
class GameLayerLoader : public CCNodeLoader{
public:
CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD( GameLayerLoader, loader ); // 静态方法loader,可直接调用。创建此类的对象,并自动清除内存对象。
CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD( GameZJG ); // 创建ccb根节点,ccb是树形结构组织的(求高手指点,这里的精华在哪)
};
3、在GameLayer类中添加与ccb文件中对应的成员变量
protected:
CCLabelTTF* _helloLabel;
public:
virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName); // 绑定菜单的回调函数
virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, const char * pSelectorName); // 绑定按钮的回调函数
virtual cocos2d::SEL_CallFuncN onResolveCCBCCCallFuncSelector(CCObject * pTarget, const char* pSelectorName); // 绑定时间轴的回调函数
virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, const char * pMemberVariableName, cocos2d::CCNode * pNode); // 绑定ccb文件中的对象
5、在GameLayer.cpp中覆盖父类的绑定函数
GameLayer::GameLayer()
: _helloLabel(NULL)
{}
GameLayer::~GameLayer()
{
CC_SAFE_RELEASE(_helloLabel);
}
SEL_MenuHandler GameLayer::onResolveCCBCCMenuItemSelector(CCObject * pTarget, const char * pSelectorName) {
return NULL;
}
SEL_CCControlHandler GameLayer::onResolveCCBCCControlSelector(CCObject * pTarget, const char * pSelectorName) {
return NULL;
}
SEL_CallFuncN GameLayer::onResolveCCBCCCallFuncSelector(CCObject * pTarget, const char* pSelectorName)
{
// CCB_SELECTORRESOLVER_CALLFUNC_GLUE(this, "onCallback1", GameLayer::onCallback1);
// CCB_SELECTORRESOLVER_CALLFUNC_GLUE(this, "onCallback2", GameLayer::onCallback2);
return NULL;
}
bool GameLayer::onAssignCCBMemberVariable(CCObject * pTarget, const char * pMemberVariableName, CCNode * pNode) {
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "helloLabel", CCLabelTTF *, this->_helloLabel);
return false;
}