如何解雇SKScene?

时间:2014-02-20 21:46:21

标签: ios ios7 sprite-kit skscene skview

当我完成我的SKScene时,有没有办法从我的SKScene课程中解雇SKScene?

如果没有回到我的ViewController中,我在那里展示我的SKScene [skView presentScene:theScene];有没有办法重新启动场景或从我的SKView中删除?

SKScene Class ReferenceSKView Class Reference 没有帮助。

更新

以下代码从我的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];
}

6 个答案:

答案 0 :(得分:12)

在遇到类似的问题后,我偶然发现了你的问题,而且由于没有人在这里给出了正确的答案,我是如何解决它的:

  1. 在我的场景中我调了两行
  2. [self removeFromParent];
    [self.view presentScene:nil];
    
    1. 在我的控制器(显示SKScene的控制器)中我更改了Apple的模板代码,Apple正在创建并显示viewDidLoad中的场景,以便在viewWillAppear中创建和显示我的场景如果视图的场景是nil
    2. 这是我的Swift代码,即使你使用的是Objective C,你也能理解它的作用;关键是“if skView.scene == nil”测试:

      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)
          }
      }
      

答案 1 :(得分:11)

您可以使用:

 [yourSKView presentScene:nil];

删除场景。

答案 2 :(得分:4)

"你不能去"回到View Controller"从一个场景。场景是视图,视图控制器控制并显示视图。使用视图控制器更改视图。请记住,视图控制器本身不是视图。" -Wharbio

此处的最佳解决方案是创建另一个视图控制器。这个视图控制器将是我的菜单。然后另一个viewcontroller将充当skscene的主机。

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

答案 3 :(得分:2)

SKScene内,您只需[self.view presentScene:aNewScene]即可展示另一个场景

答案 4 :(得分:2)

我在视图控制器中使用此块完全删除了场景: 显然,您需要声明您的尺寸,以及" newSKview"

SKView * skView = (SKView *)self.view;

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

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

答案 5 :(得分:-3)

也许我的变体会有所帮助:

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