Cocos2d-x: 重なり順の取得、変更 | Lady Wendy
CCLayerを継承したクラスで以下のように呼んでみた。
for (int i = 0; i < MAX_HOGE; i++) {
CCSprite *sprite = (CCSprite *) getChildByTag(i);
if (sprite == NULL) {
continue;
}
reorderChild(sprite, HEIGHT - sprite->getPositionY());
}
結果は失敗。重なり順は変わらない。
少し調べてみると以下のような記事が見つかった。
cocos2d-x - CCSpriteBatchNodeのzOrder - Qiita [キータ]
確かにCCSpriteBatchNodeは使っているけれど、これを使ったせいで重なり順が変えられないなんてことあるわけない(はず!)。
と、ここで気がついた。
CCSpriteBatchNode *batch = (CCSpriteBatchNode *) getChildByTag(TAG_BATCH);
for (int i = 0; i < MAX_HOGE; i++) {
CCSprite *sprite = (CCSprite *) batch->getChildByTag(i);
if (sprite == NULL) {
continue;
}
batch->reorderChild(sprite, HEIGHT - sprite->getPositionY());
}
階層としては
・CCLayer
└CCSpriteBatchNode
├CCSprite
├CCSprite
├CCSprite
:
└CCSprite
となっているのだから、CCSpriteBatchNodeのreorderChild()を呼ばなきゃダメだったわけね。
これで期待通りの重なり順になりました。
タグ:cocos2d-x