无法绑定 cocosbuilder控件和cocos2d-x 对象。

好几天了,也没解决,总是无法绑定成功。我是按照例子里的写的。

bool ZhuLayer::onAssignCCBMemberVariable(CCObject * pTarget, CCString * pMemberVariableName, CCNode * pNode) {
    
    CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "_lbCurFloor", CCLabelTTF *,
                                    this->_lbCurFloor);
   _lbCurFloor->setString("hhh");;
    
    
   // CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "_bgMid", CCSprite *,_bgMid1);
   // _bgMid->setPosition(ccp(0,0));
    return false;
}

这个_lbCurFloor总是null.

下面833
这个图是我的cocosbuilder文件。

下面是Zhulayer声明

class ZhuLayer
: public cocos2d::CCLayer
, public cocos2d::extension::CCBSelectorResolver
, public cocos2d::extension::CCBMemberVariableAssigner
, public cocos2d::extension::CCNodeLoaderListener
{
    public:
        CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(ZhuLayer, create);

        ZhuLayer();
        virtual ~ZhuLayer();

        virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName);
        virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName);
        virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, cocos2d::CCString * pMemberVariableName, cocos2d::CCNode * pNode);
        virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader);
    
        void gameLogic(float dt);
    
        void setBgStep(float t){_bgMoveStep = t;}
    
private:
    CCSprite* _bgMid1;
    CCSprite* _bgMid2;
    CCLabelTTF *_lbCurFloor;
    float _bgMoveStep;

};

class ZhuLayerLoader : public cocos2d::extension::CCLayerLoader {
    public:
        CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(ZhuLayerLoader, loader);

    protected:
        CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(ZhuLayer);
};

加载代码如下;

(ZhulinLayer*)loadCCBI("zhulin.ccbi","ZhuLayer",ZhuLayerLoader::loader());

loadCCBI的定义:

CCNode* MainScene::loadCCBI(const char * pCCBFileName, const char * pCCNodeName, CCNodeLoader * pCCNodeLoader) {
    
    CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
    
    if(pCCNodeName != NULL && pCCNodeLoader != NULL) {
        ccNodeLoaderLibrary->registerCCNodeLoader(pCCNodeName, pCCNodeLoader);
    }
    
    cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
    ccbReader->autorelease();
    
    CCNode * node = ccbReader->readNodeGraphFromFile(pCCBFileName, this);
    
    if(node != NULL) {
        this->addChild(node);
        return node;
    }
    return NULL;
}

young40大
你?的?篇博客?我明白很多
感?您!:lol

解决了。非常感谢

CCB_MEMBERVARIABLEASSIGNER_GLUE(this, “_lbCurFloor”, CCLabelTTF *,
this->_lbCurFloor);
_lbCurFloor->setString(“hhh”);;

这里只是告诉程序请绑定一下, 绑定其实还没有生效.

— Begin quote from ____

13
刚才我们提到变量绑定较init函数(更别提运行更早的构造函数了)更晚. 那么如何运行后就控制这些控件呢?
方法当然是有, 我们需要增加一个CCNodeLoaderListener, 并实现其接口.新增代码如下:
MainScene

, public cocos2d::extension::CCBSelectorResolver
, public cocos2d::extension::CCNodeLoaderListener
{
///…代码省略鸟
virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader);
///…代码省略鸟
}
MainScene.cpp

void MainScene::onNodeLoaded(cocos2d::CCNode *pNode, cocos2d::extension::CCNodeLoader *pNodeLoader)
{
this->mLabelText->setString(“All Loaded”);
}
好啦, 运行就能看到All Loaded啦.

— End quote

具体的请参见下我的文章.
http://article.ityran.com/archives/2614