首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问子ccb文件cocos2d-x中的变量

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

Stack Overflow用户
提问于 2013-02-08 00:22:44
回答 1查看 978关注 0票数 0

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

下面是这个问题的基本情况,

我有一个名为"ladybirds_page.ccb“的CCB文件,并按如下方式关联自定义加载器类(根是一个CCLayer)

  • ladybirds_pageLayerLoader.h
  • ladybirds_pageLayer.h
  • ladybirds_pageLayer.cpp

我有另一个名为"ladybird.ccb“的CCB文件,并按如下方式关联自定义加载器类(根是一个CCNode)

  • ladybirdLoader.h
  • ladybird.h
  • ladybird.cpp

"ladybirds_page.ccb“文件包含多个"ladybird.ccb”实例。它们与相关的成员变量(mLadyBird_1,mLadyBird_2,.)相关联。

"ladybird.ccb“it self包含几个与成员变量相关联的CCSprites (mDotSprite_1、mDotSprite_2、.)

我希望获得这些子ccb(LadyBird)的成员变量对每个实例的访问权限。

  • mLadyBird_1->mDotSprite_1
  • mLadyBird_1->mDotSprite_2

这是我到目前为止的编码方法,

在setNumber(int )中创建一个ladyBird.cpp方法名如下

代码语言:javascript
复制
void ladybird::setNumber(int num)
{
    .......
    .........
    mDotSprite_1->setVisible(false);
    mDotSprite_1->setVisible(false);
    ......

}

mDotSprite_1和mDotSprite_1使用CCB_MEMBERVARIABLEASSIGNER_GLUE宏进行分配。

代码语言:javascript
复制
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mDotSprite_1", CCSprite *, this->mDotSprite_1);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mDotSprite_1", CCSprite *, this->mDotSprite_1);

使用自定义加载器类加载ladybirds_page.ccb文件

代码语言:javascript
复制
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));
}

为ladyBirds在ladybirds_pageLayer.cpp中的实例分配成员变量

代码语言:javascript
复制
 CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mLadyBird_1", ladybird *, this->mLadyBird_1);
 CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mLadyBird_2", ladybird *, this->mLadyBird_2);

最后,尝试在mLadyBird_1和mLadyBird_2上调用一个方法mLadyBird_1(),如下所示

代码语言:javascript
复制
mLadyBird_1->setNumber(1);
mLadyBird_2->setNumber(2);

我让EXC_BAD_ACCESS上

代码语言:javascript
复制
mDotSprite_1->setVisible(false);

显然,我的场景没有在我的代码中实现。有人能告诉我正确的做法吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-21 06:15:52

我在加载CCSprite时也遇到了同样的问题

代码语言:javascript
复制
CCB_MEMBERVARIABLEASSIGNER_GLUE

宏。

我用

代码语言:javascript
复制
CCB_MEMBERVARIABLEASSIGNER_GLUE_WEAK

宏。

希望这能有所帮助。

编辑

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

代码语言:javascript
复制
CCB_MEMBERVARIABLEASSIGNER_GLUE

并初始化为空变量。

代码语言:javascript
复制
variableName = NULL;

然后轻轻地释放到破坏者中

代码语言:javascript
复制
CC_SAFE_RELEASE(variableName);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14763673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档