从viewcontroller检测场景

时间:2014-11-30 13:56:23

标签: swift sprite-kit viewcontroller skscene

我正在使用swift / spritekit在Xcode中开发游戏。

我想从GameViewController添加背景,但我有不同的背景场景:GameScene / MenuScene / MapScene。

现在我如何在gameviewcontroller中检测到哪个场景正在运行,以便我可以为其添加正确的背景(作为UIImage)?

如何设置UIImage的Z位置(Z-index)?

2 个答案:

答案 0 :(得分:0)

您必须自己跟踪哪个场景。像这样:

class GameViewController {
    var mapScene: SKScene?
    var menuScene: SKScene?
    var gameScene: SKScene?

    var currentScene: SKScene?

    func addBackground() {
        if currentScene === mapScene {
            // ...
        } else if currentScene === menuScene {
            // ...
        } else if currentScene === gameScene {
            // ...
        }
    }
}

如果UIImage位于SKNode内,则可以设置其zPosition属性。如果它只是普通UIKit元素中的UIImage,那么它基于何时被添加为子视图而隐含。如果您希望它在顶部,请将其从父项中删除并重新添加:

view.removeFromSuperview()
self.parentView.addSubview(view)

答案 1 :(得分:0)

如果只是在场景的实现中添加适当的背景图像,则无需检测正在运行的场景。另外,我建议您避免在视图中添加UIImage,因为转换到新场景时需要手动删除它。我建议您创建一个以背景图像作为纹理的精灵节点,并将其添加到场景中,其zPosition为负值。此外,您应该考虑将“背景”精灵的定位点和位置设置为CGPointZero

例如,在'didMoveToView'

    let backgroundNode = SKSpriteNode(imageNamed:"MenuSceneBackground")
    backgroundNode.position = CGPointZero
    backgroundNode.anchorPoint = CGPointZero
    backgroundNode.zPosition = -1000
    addChild(backgroundNode)

编辑:添加以下内容以根据需要删除手势识别器

override func willMoveFromView(view: SKView) {
    view.removeGestureRecognizer(swipeGesture)
}