cocos2d导演流程控制:推送场景后替换场景。被推动的场景会发生什么?

时间:2011-09-29 09:59:09

标签: memory-management cocos2d-iphone

// TRY TO AVOID A BIG STACK OF PUSHED SCENES
-(void) mainMenu()
{
    // etc
    [[CCDirector sharedDirector] pushScene: gameScene];
}
// stack:
//   . game  <-- running scene
//   . mainMenu

-(void) game
{
    [[CCDirector sharedDirector] pushScene: gameOverScene];
}
// stack:
//   . gameOver  <-- running scene
//   . game
//   . mainMenu

-(void) showGameOver
{
    [[CCDirector sharedDirector] pushScene: hiScoreScene];
}
// stack:
//   . scores  <-- running scene (4 pushed scenes... expensive)
//   . gameOver
//   . game
//   . mainMenu

-(void) toMainMenu
{
    [CCDirector sharedDirector] replaceScene: mainScene];
}
// stack:
//   I don't know...

我想在replaceScene:call之后杀死堆栈中的所有场景。但我不知道它是否会发生。

2 个答案:

答案 0 :(得分:2)

我对此感到厌烦(cocos2d-x,但概念相同)。我现在的经验法则是 - 只有按 方式退出该屏幕才能弹出场景。如果你想从你推动的场景转到另一个场景,你应该使用replaceScene。

答案 1 :(得分:1)

始终使用replaceScene。

推动&amp;弹出场景仅对快速间歇有意义,即显示设置屏幕。您将希望避免任何推送场景的场景,可能会在其中调用replaceScene。跟踪当前场景堆栈变得非常复杂和不方便(Director没有公开任何便利方法来管理场景堆栈)。在内存不足之前,很容易意外地继续增加推送场景的堆栈。

简短的回答是:尽可能避免弹出和推动场景。如果需要保持状态,请创建一个Singleton类,用于存储替换场景时需要保留的值。