popSceneでどうやってアニメーション遷移するの?

2014年3月4日

CCDirectorクラスには、遷移する際にreplaceScene,pushScene,popSceneと3種類の遷移関数があるのだが、
popSceneでは、遷移アニメーションが使えないのだ。
ちなみに各意味は以下の通り。(すみません。出典は忘れました。)

  • (replaceScene)直前のsceneはもう使わないから捨ててしまう方法。基本はこれになります。
  • (pushScene)直前のsceneに戻る予定があるので、メモリに取っておく方法です。
  • (popScene)pushしたsceneを消して、元のsceneに戻る処理。

CCDirectorを直接改造すると一応できます。

CCScene *previousScene(void) {
    unsigned int c = m_pobScenesStack->count();
    if (c <= 1) return NULL;
    return (CCScene*)m_pobScenesStack->objectAtIndex(c - 2);
}
void popScene(CCScene *trans) {
    CCAssert(m_pRunningScene != NULL, "running scene should not null");
    m_pobScenesStack->removeLastObject();
    unsigned int c = m_pobScenesStack->count();
    if (c == 0) {
        end();
    }
    else {
        m_bSendCleanupToScene = true;
        m_pNextScene = trans; // (CCScene*)m_pobScenesStack->objectAtIndex(c - 1);
    }
}
CCScene *prevScene = CCDirector::sharedDirector()->previousScene();
CCTransitionScene* transition = CCTransitionPageTurn::create(0.66, prevScene, false);
CCDirector::sharedDirector()->popScene(transition);

ただ、これ、cocos2d-xのコード自体を修正しないといけないという恐ろしい手法です。
最底辺にはとても出来ません。
結局、全部replaceScene使うのが良いのかねえ。。。

cocos2d-x

Posted by koheizi