访问子ccb文件cocos2d-x中的变量

访问子ccb文件cocos2d-x中的变量,cocos2d-x,Cocos2d X,如何从主“ccb”文件(cocos2d-x)的自定义图层类访问子ccb中定义的成员变量? 这是这个问题的基本情况 我有一个名为“ladybirds_page.CCB”的CCB文件,并将自定义加载程序类关联如下(root是一个CCLayer) ladybirds_pageLayerLoader.h 瓢虫 瓢虫_pageLayer.cpp 我还有另一个名为“ladybird.CCB”的CCB文件,并将自定义加载程序类关联如下(root是一个CCNode) 瓢虫装载机 瓢虫 瓢虫 “lady

如何从主“ccb”文件(cocos2d-x)的自定义图层类访问子ccb中定义的成员变量?

这是这个问题的基本情况


我有一个名为“ladybirds_page.CCB”的CCB文件,并将自定义加载程序类关联如下(root是一个CCLayer)

  • ladybirds_pageLayerLoader.h
  • 瓢虫
  • 瓢虫_pageLayer.cpp
我还有另一个名为“ladybird.CCB”的CCB文件,并将自定义加载程序类关联如下(root是一个CCNode)

  • 瓢虫装载机
  • 瓢虫
  • 瓢虫
“ladybird_page.ccb”文件包含几个“ladybird.ccb”实例。它们与相关的成员变量(mLadyBird_1,mLadyBird_2,…)相关

和“ladybird.ccb”,它本身包含几个与成员变量(mDotSprite_1、mDotSprite_2,…)关联的ccsprite

我想获得这些子ccb(ladyBird)的成员变量对每个实例的访问权。像

  • mLadyBird_1->mDotSprite_1
  • mLadyBird_1->mDotSprite_2

这是我迄今为止的编码方法

在ladyBird.cpp中创建一个名为setNumber(int num)的方法,如下所示

void ladybird::setNumber(int num)
{
    .......
    .........
    mDotSprite_1->setVisible(false);
    mDotSprite_1->setVisible(false);
    ......

}
mDotSprite_1和mDotSprite_1是使用CCB_成员变量Assigner_GLUE宏分配的

CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mDotSprite_1", CCSprite *, this->mDotSprite_1);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mDotSprite_1", CCSprite *, this->mDotSprite_1);
使用其自定义加载程序类加载ladybirds_page.ccb文件

void intro_pageLayer::loadNextPage()
{

    /* Create an autorelease CCNodeLoaderLibrary. */
    CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();

    ccNodeLoaderLibrary->registerCCNodeLoader("ladybird", ladybirdLoader::loader());
    ccNodeLoaderLibrary->registerCCNodeLoader("ladybirds_pageLayer", ladybirds_pageLayerLoader::loader());


    /* Create an autorelease CCBReader. */
    cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);


    /* Read a ccbi file. */
    CCNode * node = ccbReader->readNodeGraphFromFile("ccb/ladybirds_page.ccbi", this);

    ccbReader->release();

    CCScene * scene = CCScene::create();
    if(node != NULL) {
        scene->addChild(node);
    }

    /* Push the new scene with a fancy transition. */

    CCDirector::sharedDirector()->pushScene(CCTransitionPageTurn::create(0.5f, scene, false));
}
为Ladybird_pageLayer.cpp中的Ladybird实例分配成员变量

 CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mLadyBird_1", ladybird *, this->mLadyBird_1);
 CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mLadyBird_2", ladybird *, this->mLadyBird_2);
最后,尝试在mLadyBird_1和mLadyBird_2上调用方法setNumber(),如下所示

mLadyBird_1->setNumber(1);
mLadyBird_2->setNumber(2);

我的EXC\u访问权限不好

mDotSprite_1->setVisible(false);
显然,我的场景没有在代码中实现。有谁能告诉我正确的方法吗


谢谢。

我在通过

CCB_MEMBERVARIABLEASSIGNER_GLUE

我用计算机解决了这个问题

CCB_MEMBERVARIABLEASSIGNER_GLUE_WEAK

希望有帮助

编辑

然而,更好的解决方案是使用

CCB_MEMBERVARIABLEASSIGNER_GLUE
并初始化为空变量

variableName = NULL;
然后轻轻地释放到析构函数中

CC_SAFE_RELEASE(variableName);

哇!已经三年多了。我没注意到有人回答了这个老问题。无论如何,我不想让你的努力付诸东流。所以给你。。。