如何解雇SKScene?

4Ge*_*lOf 14 ios ios7 sprite-kit skview 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];
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 12

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

  1. 在我的场景中,我打了两行
[self removeFromParent];
[self.view presentScene:nil];
Run Code Online (Sandbox Code Playgroud)
  1. 在我的控制器(显示SKScene的控制器)中,我更改了Apple的模板代码,Apple正在创建和显示viewDidLoad中的场景,以便在viewWillAppear中创建和显示我的场景,仅当视图的场景为零时

这是我的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)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您的答案不那么令人困惑,那将会有所帮助。你既有快速又客观的特点 c. 我不确定您的代码片段是否与您的文字一致。您提到了视图控制器,但显示了游戏场景中的例程?就我而言,我在视图控制器中设置了两个断点,一个在 viewdidload 中,另一个在 viewwillappear 中。开始时两者都会命中,但在步骤 1 中游戏场景中使用的方法之后都不会命中。 (2认同)

And*_*yOS 11

您可以使用:

 [yourSKView presentScene:nil];
Run Code Online (Sandbox Code Playgroud)

删除场景.


4Ge*_*lOf 4

“你不能从场景“返回视图控制器”。场景是一个视图,视图控制器控制和显示视图。使用视图控制器来更改视图。记住视图控制器本身不是视图。” -沃比奥

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

在我的情况下,我然后使用菜单视图控制器来关闭 skview 中显示的视图控制器。