// 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之后删除堆栈中的所有场景。但我不知道这是否会发生。
发布于 2011-09-30 17:36:35
从头到尾都使用replaceScene。
推送和弹出场景只对快速中场休息有意义,即显示设置屏幕。您将希望避免推送场景的任何情况,在推送场景之后可能会调用replaceScene。跟踪当前场景堆栈变得非常复杂和不方便(Director没有公开任何方便的方法来管理场景堆栈)。很容易意外地不断增加推送场景的堆栈,直到内存耗尽。
简短的答案是:尽可能避免弹出和推送场景。如果需要保持状态,请创建一个Singleton类,用于存储替换场景时需要持久化的值。
发布于 2012-03-02 09:25:46
我只是被这个(cocos2d-x,但相同的概念)所吸引。我现在的经验法则是-只有当退出该屏幕的唯一方法是弹出场景时,才会按下该场景。如果要从推送的场景转到另一个场景,则应改用replaceScene。
https://stackoverflow.com/questions/7595597
复制相似问题