Swift:在原版GameScene上加载新的SKScene? (仍然将GameScene放在下面?)

时间:2015-08-23 00:20:38

标签: swift sprite-kit

好吧所以我在Swift中创建了一个sprite kit游戏,我需要呈现一个新的Team.findOne({id:id}).populate('users').exec(function(err, team){ console.log(team.toJSON()) }); OVER(因为在新场景中会有一个清晰的背景,所以你仍然可以看到{{1}在我的原始SKScene之下。

我尝试过多种方式,最初转换为视图控制器,而后者又应该以苹果对GameSceneGameScene的方式呈现新的SKScene,但是我只是得到了一个灰色的屏幕。新GameScene的代码都没有执行,我也无法添加任何GameViewController或其他内容。

所以现在我已经部分成功转换到视图控制器,转换为新的SKScene(名为skspritenodes),如下所示:

SKScene

然后在GameOverScene我有:

override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.dismissViewControllerAnimated(true, completion: nil)
        (self.view as! SKView).presentScene(GameOverScene(size: self.view.bounds.size))

    }

它似乎有效,但有两个问题:

  1. "它有效!打印到控制台,我可以更改背景颜色,但我无法添加精灵节点或任何东西。例如,我看不到GameOverScene

  2. 即使我将背景设置为 let saveMeBtn = SKSpriteNode() override func didMoveToView(view: SKView) { //Do stuff in scene println("it works!") self.backgroundColor = SKColor.clearColor() saveMeBtn.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.5) saveMeBtn.setScale(1) addChild(saveMeBtn) } } ,我也无法在下面看到GameScene。我只是得到一个黑屏。

  3. 我在这里做错了什么?我如何加载saveMeBtn以上的clearColor()并仍然看到SKScene

2 个答案:

答案 0 :(得分:1)

据我所知,SpriteKit经过优化,只能渲染呈现的场景,而SKView只能一次呈现一个场景。

我可能错了,但它知道什么时候带有SKView / SKScene的UIViewController不是最顶级的,它不会渲染或更新。它类似于使用SKView对另一个VC执行push segue时的情况。如果继续渲染它会导致性能非常差,因此SpriteKit会停止渲染和更新不可见的SKView。

如果您希望游戏显示在下面,最好的办法是为它创建一个SKNode或SKSpriteNode子类。您可以根据需要调整大小,并仍然可以看到其下的其他场景。如果是我,我会添加一个名为GameOver的SKNode,添加我需要的任何精灵,然后将游戏滑过屏幕。

希望这很有帮助。

答案 1 :(得分:1)

只需使用参考节点加载它 使用适当的路径指向新场景。 如果你想访问物理,最好在加载场景后用枚举添加它们。

Gamescene由于ARC而被卸载,因为它不可见而被丢弃