cocos2d - CCDirector,replaceScene 功能问题

Posted

技术标签:

【中文标题】cocos2d - CCDirector,replaceScene 功能问题【英文标题】:cocos2d - CCDirector, the replaceScene function issue 【发布时间】:2012-07-03 09:28:27 【问题描述】:

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

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

+(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】:

我假设你上面提到的第一个按钮在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 将其弹出,将应用流程恢复到仍保留在设备内存中的前一个场景。

【讨论】:

以上是关于cocos2d - CCDirector,replaceScene 功能问题的主要内容,如果未能解决你的问题,请参考以下文章

初始化cocos2d&ŧ039;的contentScale

cocos2d_android 第一个游戏

刚刚开始学COCOS2D,在CCMenu中的菜单按键事件中,有按下的效果,但是没有回调按键指定的函数,求教啊~~

CCDirector导演类

5.27:cocos2d-x初探学习笔记--重要概念及Test样例结构(转)

哇!板球 源代码分析一