iOS7 Sprite Kit如何使用Sprite Kit重置/开始新游戏?

问题描述:

到目前为止,我一直在研究一个Sprite Kit游戏,每当我点击xCode中的“Play”按钮时就会开始一款新游戏。现在我试图在游戏中实现一个“新游戏”按钮,它将重置游戏并开始新游戏。iOS7 Sprite Kit如何使用Sprite Kit重置/开始新游戏?

我需要采取哪些步骤才能确保我的旧游戏场景不见了,并且没有任何悬挂引用?

  • 我是否需要在场景中进行任何类型的手动清理? (如在旧的viewDidUnload中)或者ARC会处理所有事情?
  • 我是否需要显式删除任何视图控制器视图,我可能已经从场景中添加到它的超级视图?
  • 是否有任何内置方法可以帮助我重置我的游戏?

这是我到目前为止使用的。

-(void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    //set the view only once, because this method will be called again on rotation 
    if(!self.kkView.scene) 
    { 
     landscapeSize = self.kkView.bounds.size; 

     self.kkView.showsFPS = NO; 
     self.kkView.showsNodeCount = NO; 
     self.kkView.showsDrawCount = NO; 

     MyScene * gameScene = [MyScene sceneWithSize:landscapeSize]; 
     gameScene.scaleMode = SKSceneScaleModeAspectFill; 

     IntroScene * scene = [IntroScene sceneWithSize:landscapeSize]; 
     scene.gameScene = gameScene; 

     scene.scaleMode = SKSceneScaleModeAspectFill; 
     [self.kkView presentScene:scene]; 
    } 
} 
+1

最好的建议是使用仪器来验证没有任何泄漏。分析器也会提供帮助,同样可以将日志语句放在类的dealloc方法中。其他所有内容都需要使用相关代码进行调试。 – LearnCocos2D

ARC应该照顾清理对象创建(如+ sceneWithSize :)。我也相信,如果你正在移除整个SKScene,那么对你所有附加的节点和动作进行清理(可能在-willMoveFromView:方法中)。但是,如果您希望保留场景并重置场景子类本身内的节点和动作,则可以在场景的设置部分之前执行以下操作(在-didMoveToView方法中或者在-didMoveToView方法中)或你自己的设置方法):

[self removeAllChildren]; 
[self removeAllActions]; 
... 
[self addChild:node]; 
etc 
+0

感谢这些代码行帮助我。但由于某些原因,arc没有清理所有东西(我正在使用beta Xcode)。所以我在调用相同的SKSCENE之前使用了这些删除方法,现在一切正常。 – helloGo