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

How to detect the current scene in SpriteKit project

在我的 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
            }
        }
     }
  }

这是由 scene property of the SKView class 跟踪的。例如:

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 语句中尝试向下转换的 standard/idiomatic 方法。


更新。如果您打算在游戏代码中使用 name 属性(在 *.sks 文件 或直接在您的 代码)。例如:

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