什么时候应该使用pushScene和replaceScene?

时间:2010-05-21 11:58:57

标签: cocoa-touch cocos2d-iphone

我cocos2d,我正在使用pushScene和replaceScene移动到下一个场景。但是,我很困惑我们应该使用哪个?

当我在某些地方使用replaceScene时,应用程序崩溃并出现错误,例如

-[UITextView length]: unrecognized selector sent to instance 0x842a750  
 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UITextView length]: unrecognized selector sent to instance 0x842a750'  

但是,在我的程序中,我没有将长度传递给UITextView。我的计划就是这样 在scene1中我有UITextView,我用scene2替换这个场景。然后

-(id)buttonPressed:(id)sender
{
    [description removeFromSuperview];  // It is the textView(description)
    CCScene *Scene = [CCScene node];
    CCLayer *Layer = [scene2 node];

    [Scene addChild:Layer];

    [[CCDirector sharedDirector] setAnimationInterval:1.0/60];
    [[CCDirector sharedDirector] replaceScene: Scene];
}  

但是,当我在replaceScene的存在下使用pushScene时,它运行良好。请澄清我应该在哪些情况下使用哪一个?

谢谢

1 个答案:

答案 0 :(得分:3)

几乎在所有情况下,您都希望使用replaceScene。 pushScene方法将前一个场景保留在内存中,这很可能是它没有崩溃的原因。关于那个场景的东西不是很正确,当它在replaceScene之后解除分配时,就会发生崩溃。它与cocos2d的替换场景系统无关。

你在场景1中的UITextView可能经常发布。如果将其创建为自动释放对象,请不要向其发送释放消息。