如何检测SpriteKit项目中的当前场景

时间:2017-10-23 14:28:54

标签: ios swift sprite-kit skscene

在我的SpriteKit应用程序中我有3个不同的场景,我想为每个场景设置一个特定的设置。 我的意思是我希望在MainPage和SomeInfoScene中设置可见的AdBanner,但在GameScene中则不能。我怎样才能做到这一点? 这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    if let view = self.view as! SKView? {

        let mainPage = SKScene(fileNamed: "MainPage")!
        mainPage.name = "MainPage"

        let someInfoPage = SKScene(fileNamed: "SomeInfoScene")!
        someInfoPage.name = "SomeInfoScene"

        let gameScene = SKScene(fileNamed: "GameScene")!
        gameScene.name = "GameScene"

        view.presentScene(mainPage)

        if let currentScene = view.scene {

            if currentScene.name == mainPage.name {

                print("MainPage")
                adBannerView.isHidden = false
            }
            if currentScene.name == someInfoPage.name {

                print("SomeInfoScene")
                adBannerView.isHidden = false
            }
            if currentScene.name == gameScene.name {

                print("GameScene")
                adBannerView.isHidden = true
            }
        }
     }
  }

1 个答案:

答案 0 :(得分:2)

这由scene类的SKView属性跟踪。例如:

if let view = self.view as? SKView {
    if let currentScene = view.scene {
        print("Current scene is: \(currentScene)")
    else {
        print("Current scene is nil")
    }
}

顺便说一下,你的第一行真的应该是:

if let view = self.view as? SKView { ...

这是在if声明中尝试向下转换的标准/惯用方法。

<强>更新即可。如果您计划在游戏代码中使用name属性(在代码中直接在*.sks文件中),则还需要设置API of Keras属性。例如:

let scene = SKScene(fileNamed: "MainPage")!
scene.name = "MainPage"
view.presentScene(scene)