【问题标题】:How to detect the current scene in SpriteKit project如何在 SpriteKit 项目中检测当前场景
【发布时间】:2017-10-23 14:28:53
【问题描述】:

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

【问题讨论】:

  • 根据这段代码,你最后的if语句是没有意义的,当前场景将永远是MainPage
  • view.presentScene(mainPage) 行表示"MainPage" 场景——这是现在view.scene 返回的场景。因此,[2] 中的 [1] 中的代码永远不会被触发。您可能需要检查您的游戏控制器逻辑...
  • 是的,但是当我打开 SomeInfoScene 或 GameScene 时,它​​不应该运行代码 [1] 和 [2] 吗?
  • 我想为每个场景设置不同的设置,我该怎么做?
  • 嘿伙计,我建议您针对这个特定问题打开 另一个 问题(并链接回这个问题以供快速参考)。这样你会得到更好的结果......(请不​​要忘记接受/赞成我的回答)。谢谢兄弟!

标签: ios swift sprite-kit skscene


【解决方案1】:

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

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 文件中)。例如:

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

【讨论】:

  • 我没明白你的意思。
  • SKView 之后的 ... 是什么意思?
  • @PietroP。因为你问错了问题,所以你需要在你的 SKS 文件中分配name,然后你的 switch 才能工作
  • @PauloMattos,第一行是 Apple 编写模板的方式(不知道为什么)
  • @PauloMattos 维护 Sprite 工具包的人只是在破坏库,可能是他们雇用的一些新的实习生/初级程序员,他们对语言/框架一无所知,并被告知只是随意使用它 LOL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多