如何从主“ccb”文件(cocos2d-x)的自定义层类访问子ccb中定义的成员变量?
这是这个问题的基本场景,
我有一个名为“ladybirds_page.ccb”的 CCB 文件,并将自定义加载器类关联如下(根是 CCLayer)
- 瓢虫_pageLayerLoader.h
- 瓢虫_pageLayer.h
- 瓢虫_pageLayer.cpp
我有另一个名为“ladybird.ccb”的CCB文件,并将自定义加载器类关联如下(根是CCNode)
- 瓢虫加载器.h
- 瓢虫变种h
- 瓢虫.cpp
“ladybirds_page.ccb”文件包含多个“ladybird.ccb”实例。并且它们与相关的成员变量相关联(mLadyBird_1,mLadyBird_2,..)
和“ladybird.ccb”它自己包含几个与成员变量关联的CCSprite(mDotSprite_1,mDotSprite_2,...)
我想为它的每个实例获取这些子 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_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_pageLayer.cpp中的ladyBirds实例分配成员变量
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_BAD_ACCESS
mDotSprite_1->setVisible(false);
显然,我的方案没有在我的代码中实现。那么有人可以告诉我正确的方法吗?
谢谢你。