// 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之后杀死堆栈中的所有场景。但我不知道它是否会发生。
答案 0 :(得分:2)
我对此感到厌烦(cocos2d-x,但概念相同)。我现在的经验法则是 - 只有按 方式退出该屏幕才能弹出场景。如果你想从你推动的场景转到另一个场景,你应该使用replaceScene。
答案 1 :(得分:1)
始终使用replaceScene。
推动&amp;弹出场景仅对快速间歇有意义,即显示设置屏幕。您将希望避免任何推送场景的场景,可能会在其中调用replaceScene。跟踪当前场景堆栈变得非常复杂和不方便(Director没有公开任何便利方法来管理场景堆栈)。在内存不足之前,很容易意外地继续增加推送场景的堆栈。
简短的回答是:尽可能避免弹出和推动场景。如果需要保持状态,请创建一个Singleton类,用于存储替换场景时需要保留的值。