16

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

如果没有回到我展示我的 SKScene 的 Viewcontroller [skView presentScene:theScene];的 Viewcontroller中,有没有办法重新启动场景或从我的 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];
}
4

7 回答 7

13

遇到了类似的问题,我偶然发现了你的问题,由于没有人给出一个体面的答案,这就是我解决它的方法:

  1. 在我的场景中,我调用了两条线
[self removeFromParent];
[self.view presentScene:nil];
  1. 在我的控制器(显示 SKScene 的控制器)中,我更改了 Apple 的模板代码,该代码从 viewDidLoad 创建和呈现我的场景,以便在 viewWillAppear 中创建和呈现我的场景,前提是视图的场景为 nil

这是我的 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)
    }
}
于 2014-12-12T05:53:29.920 回答
11

您可以使用:

 [yourSKView presentScene:nil];

删除场景。

于 2014-02-20T22:02:36.173 回答
4

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

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

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

于 2014-08-11T18:16:08.007 回答
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];

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

于 2014-07-24T03:58:31.287 回答
2

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

于 2014-02-20T21:53:10.847 回答
0

我更喜欢在制作 SkScene的地方和地方使用额外UIViewController的。SKViewNotification CenterUIViewController

回调函数是

@objc func cb_dismissingVC(_ notificaiton: Notification) {
    self.dismiss(animated: true, completion: nil)
}
于 2021-09-27T04:35:07.763 回答
-3

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

[[self.scene childNodeWithName:@"YourChildNodeName"] removeFromParent];
于 2014-04-17T13:10:42.257 回答