如何从主"ccb“文件(cocos2d-x)的自定义层类访问子ccb中定义的成员变量?。
下面是这个问题的基本情况,
我有一个名为"ladybirds_page.ccb“的CCB文件,并按如下方式关联自定义加载器类(根是一个CCLayer)
我有另一个名为"ladybird.ccb“的CCB文件,并按如下方式关联自定义加载器类(根是一个CCNode)
"ladybirds_page.ccb“文件包含多个"ladybird.ccb”实例。它们与相关的成员变量(mLadyBird_1,mLadyBird_2,.)相关联。
"ladybird.ccb“it self包含几个与成员变量相关联的CCSprites (mDotSprite_1、mDotSprite_2、.)
我希望获得这些子ccb(LadyBird)的成员变量对每个实例的访问权限。
这是我到目前为止的编码方法,
在setNumber(int )中创建一个ladyBird.cpp方法名如下
void ladybird::setNumber(int num)
{
.......
.........
mDotSprite_1->setVisible(false);
mDotSprite_1->setVisible(false);
......
}mDotSprite_1和mDotSprite_1使用CCB_MEMBERVARIABLEASSIGNER_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));
}为ladyBirds在ladybirds_pageLayer.cpp中的实例分配成员变量
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(),如下所示
mLadyBird_1->setNumber(1);
mLadyBird_2->setNumber(2);我让EXC_BAD_ACCESS上
mDotSprite_1->setVisible(false);显然,我的场景没有在我的代码中实现。有人能告诉我正确的做法吗?
谢谢。
发布于 2013-06-21 06:15:52
我在加载CCSprite时也遇到了同样的问题
CCB_MEMBERVARIABLEASSIGNER_GLUE宏。
我用
CCB_MEMBERVARIABLEASSIGNER_GLUE_WEAK宏。
希望这能有所帮助。
编辑
然而,更好的解决方案是使用。
CCB_MEMBERVARIABLEASSIGNER_GLUE并初始化为空变量。
variableName = NULL;然后轻轻地释放到破坏者中
CC_SAFE_RELEASE(variableName);https://stackoverflow.com/questions/14763673
复制相似问题