如何解散SKScene?

当我完成我的SKScene是否有一种方法来解散我的SKScene类SKScene?

如果没有在我的ViewController中显示我的SKScene [skView presentScene:theScene]; 有没有办法重新启动现场或删除从我的SKView?

SKScene类参考和SKView类参考没有帮助。

更新:

下面的代码从我的SKView中删除我的场景[yourSKView presentScene:nil]; 但是当我回到我的视图控制器时,场景仍然在后台运行。 当游戏结束时,我总是可以暂停它,然后我回到我的视图控制器(菜单),但我想知道是否有另一种方法,然后像彻底删除它一样暂停它?

 -(void)endTheGame { [highscoreLabel removeFromSuperview]; NSLog(@"Game Over"); //would like to end here before calling the below method in my view controller [self.delegate mySceneDidFinish:self]; } 

您可以使用:

  [yourSKView presentScene:nil]; 

去除现场。

遇到了类似的问题,我偶然发现了你的问题,因为没有人给出正确的答案,所以我解决了这个问题:

  1. 在我的场景中,我叫了两条线
 [self removeFromParent]; [self.view presentScene:nil]; 
  1. 在我的控制器 (显示SKScene的控制器)中,我改变了Apple的模板代码,这是从viewDidLoad创build和呈现我的场景,以创build和呈现我的场景viewWillAppear,只有当视图的场景是零

这里是我的Swift代码,即使你使用Objective C,你也会明白它的作用; 关键是“如果skView.scene ==零”testing:

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) let skView = self.view as SKView if skView.scene == nil { let scene = GameScene(size:skView.bounds.size) scene.controller = self skView.ignoresSiblingOrder = true scene.scaleMode = .AspectFill skView.presentScene(scene) } } 

“你不能从场景中”回到视图控制器“,场景是视图,视图控制器控制和显示视图,使用视图控制器来改变视图,记住视图控制器本身不是视图。 -Wharbio

最好的解决scheme是创build另一个视图控制器。 这个视图控制器将是我的菜单。 然后另一个视图控制器将作为skscene的主机。

在我的情况下,然后使用我的菜单viewcontrollerclosures显示在skview中的viewcontroller。

从你的SKScene ,你可以简单地做[self.view presentScene:aNewScene]来呈现另一个场景

我通过在我的视图控制器中使用此块完全删除场景:显然,您将需要声明您的大小和“newSKview”

 SKView * skView = (SKView *)self.view; SKScene *newScene = [[newSKView alloc]initWithSize:size]; newScene.scaleMode = SKSceneScaleModeAspectFill; SKScene *oldScene=(skView.scene); [oldScene removeFromParent]; [skView presentScene:newScene]; 

这对我来说很好。 我的场景没有保留或强大。

也许我的变体会有帮助:

 [[self.scene childNodeWithName:@"YourChildNodeName"] removeFromParent];