现在的位置: 首页 > 综合 > 正文

Cocos2dx 之 cocosbuilder的使用

2017年10月10日 ⁄ 综合 ⁄ 共 2244字 ⁄ 字号 评论关闭

1.我使用的是 cocos2dx-2.03 的版本

   cocosbuilder 2.1 的版本

   如果版本不兼容,会出现类似 WARNING! Incompatible ccbi file version (file: 3 reader: 5) 这样的警告.



2.需要注意cocosbuilder的基本使用,注意文件的路径等

代码加载一个Layer:

void FirstScene::onEnter()
{
    CCScene::onEnter();
    
    // 创建一个 CCNodeLoaderLibrary
    CCNodeLoaderLibrary* ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
    ccNodeLoaderLibrary->registerCCNodeLoader("FirstLayer",FirstLayerLoader::loader());
    
    // 创建一个 CCBReader
    CCBReader* ccbReader = new CCBReader(ccNodeLoaderLibrary);
 
    //Read a ccbi file
    CCNode* node = ccbReader->readNodeGraphFromFile("ccb_publish/first.ccbi", this);
    ccbReader->release();
    
    if (NULL != node) {
        this->addChild(node);
    }
}

这些,可以在一个Scene的 onEnter()里面去完成。


注意里面的 

FirstLayer 和  FirstLayerLoader  这两个类.
FirstLayerLoader这个类需要继承自CCLayerLoader,每一个Document Root这样的CCLayer都需要对应一个单独的XXXLayerLoader.
否则,事件就不能绑定上去,会出现类似 Skipping selector 'playBtnClicked' since no CCBSelectorResolver is present.这样的错误.

class FirstLayerLoader : public CCLayerLoader
{
public:
    
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(FirstLayerLoader, loader);
    
protected:
    CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(FirstLayer);
};

主要是FirstLayer这个类。
这个类对应我们Cocosbuilder里面创建的 CCLayer,也就是Document Root,在Cocosbuilder里面的Custom class里面一定要指定,否则绑定不了事件. 会出现类似Skipping selector 'playBtnClicked' since no CCBSelectorResolver is present. 这样的错误.

class FirstLayer
:public CCLayer
,public CCBSelectorResolver
,public CCBMemberVariableAssigner
,public CCNodeLoaderListener
{
    
public:
    
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(FirstLayer, create);
    
    FirstLayer();
    virtual ~FirstLayer();
    
    virtual void onEnter();
    
    
    //
    // CCBSelectorResolver
    virtual SEL_MenuHandler onResolveCCBCCMenuItemSelector(CCObject * pTarget, CCString * pSelectorName);
    
    
    virtual SEL_CCControlHandler onResolveCCBCCControlSelector(CCObject * pTarget, CCString * pSelectorName);
    
    //
    // CCBMemberVariableAssigner
    virtual bool onAssignCCBMemberVariable(CCObject * pTarget, CCString * pMemberVariableName, CCNode * pNode);
    
    
    //
    //CCNodeLoaderListener
    virtual void onNodeLoaded(CCNode * pNode, CCNodeLoader * pNodeLoader);
    
    //
    // Btn Clicked
    void playBtnClicked(CCObject* pSender,CCControlEvent pCCControlEvent);
};

FirstLayer主要是继承自四个类:CCLayer,CCBSelectorResolver,CCBMemberVariableAssigner,CCNodeLoaderListener.
然后实现里面的虚方法.
  void playBtnClicked(CCObject* pSender,CCControlEvent pCCControlEvent);
 就是一个CCControlButton绑定的回调方法.

Cocosbuilder里面添加CCControlButton的设置:

抱歉!评论已关闭.