cocos2d - CCDirector,replaceScene函数问题

时间:2012-07-03 09:28:27

标签: objective-c ios5 cocos2d-iphone

所以我正在开发一个在屏幕上绘制内容的应用程序,比如图表和类似的东西。在测试它和它的功能时我遇到了这个问题。

我有一个按钮,当按下该按钮进入设置场景时。我像这样初始化场景

+(id) scenew
{
   CCScene *scene = [CCScene node];
   Settings *layer = [Settings node];    
   [scene addChild: layer]; 
   return scene;

}

在那个场景中,我还有两个按钮,一个完成按钮和一个新的按钮。

done = [CCMenuItemImage itemFromNormalImage:@"done.png" selectedImage:@"done.png" target:self selector:@selector(done:)];

按下新的按钮立即进入,但完成按钮延迟2-3秒。 该应用程序出现了一些控制台消息,似乎按下它时重新计算整个图形,就像启动应用程序时一样。 所有按钮都调用相同的CCDirector函数,即replaceScene。

-(void) whatNew: (id)sender
{
[[CCDirector sharedDirector] replaceScene: [New scene]];
}

-(void) done: (id)sender
{
[[CCDirector sharedDirector] replaceScene: [Main scene]];
}

有没有办法让我稍微优化一下......我的意思是......使用replaceScene的有效方法,或者其他不强制重新计算图形的东西?因为无论何时按下该按钮,它实际上会跳到我的图表类实现的顶部,该实现具有超过4500行O.o

1 个答案:

答案 0 :(得分:2)

我假设您上面提到的第一个按钮位于Main场景内,转到Setting场景。

要在将应用流转移到Main场景时保留内存中的Setting场景,您只需使用pushScene:代替replaceScene:

// in Main scene class
[[CCDirector sharedDirector] pushScene:[Setting scene]];

然后,从Setting场景内部,只需使用popScene返回Main场景:

-(void) done: (id)sender
{
    [[CCDirector sharedDirector] popScene];
}

基本上pushScene:只需将新场景推到当前场景的顶部,而popScene将其弹出,将应用流程还原为仍保留在设备内存中的上一场景。