メインの「ccb」ファイル(cocos2d-x)のカスタムレイヤークラスから、サブccbで定義されたメンバー変数にアクセスするにはどうすればよいですか?
この質問の基本シナリオは次のとおりです。
「ladybirds_page.ccb」という名前のCCBファイルがあり、カスタムローダークラスを次のように関連付けます(ルートはCCLayerです)
- ladybirds_pageLayerLoader.h
- ladybirds_pageLayer.h
- ladybirds_pageLayer.cpp
「ladybird.ccb」という名前の別のCCBファイルがあり、カスタムローダークラスを次のように関連付けます(ルートはCCNodeです)
- ladybirdLoader.h
- テントウムシ.h
- ladybird.cpp
「ladybirds_page.ccb」ファイルには、「ladybird.ccb」のインスタンスがいくつか含まれています。そして、それらは関連するメンバー変数(mLadyBird_1、mLadyBird_2、..)に関連付けられています。
「ladybird.ccb」自体には、メンバー変数(mDotSprite_1、mDotSprite_2、...)に関連付けられたいくつかのCCSpriteが含まれています。
インスタンスごとに、これらのsub-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);
明らかに、私のシナリオは私のコードに実装されていませんでした。だから誰かがこれを行う正しい方法について私に教えてもらえますか?
ありがとうございました。