swift - 从另一个无法从 SKS 文件加载的 SKScene 呈现的 SKScene

标签 swift xcode

我有一个非常具体的问题。我曾经使用默认代码从 View Controller 呈现我的游戏场景。但是,我添加了另一个 SKScene,现在使用以下代码展示我的游戏场景:

//In an SKScene (not Game scene)
let scene = GameScene()
let skView = self.view!
skView.ignoresSiblingOrder = true
scene.scaleMode = .aspectFit
let push = SKTransition.push(with: SKTransitionDirection.right, duration: 0.4)
skView.presentScene(scene, transition: push)

我的问题是我的游戏场景似乎不再像运行代码行时那样识别我的 SKS 文件:

//in gamescene
sprite = self.childNode(withName: "sprite") as! SKLabelNode

展开时没有找到任何东西。 当我使用代码从 GameViewController 展示我的 SKScene 时:

if let scene = GKScene(fileNamed: "GameScene") {

        // Get the SKScene from the loaded GKScene
        if let sceneNode = scene.rootNode as! GameScene? {

            // Copy gameplay related content over to the scene
            sceneNode.entities = scene.entities
            sceneNode.graphs = scene.graphs

            // Set the scale mode to scale to fit the window
            sceneNode.scaleMode = .aspectFit

            // Present the scene
            if let view = self.view as! SKView? {
                view.presentScene(sceneNode)

                view.ignoresSiblingOrder = true
            }
        }
    }

一切正常。我究竟做错了什么?提前致谢。

最佳答案

我认为当您从 SKScene 而不是从 UIViewController 呈现时崩溃的原因有两个。

  1. 您正在创建 2 个不同的类,它们可能具有不同的代码。当您从 SKScene 呈现时,您创建了一个类型为 GameScene 的对象,但是当您从 UIViewController 呈现时,您创建了一个类型为 的对象>GKScene.
  2. 当您创建 GameScene 类型的对象时,您使用的初始化器没有考虑附加的 SKS 文件。但是,当您创建 GKScene 类型的对象时,您会这样做。

因此,我将第一段代码编辑为:

//In an SKScene (not Game scene)
if let sceneContainer = GKScene(fileNamed: "GameScene") {
    let skView = self.view!
    skView.ignoresSiblingOrder = true
    //Something comparable to the following line. I don't have a project set up, but let the compiler run you through the exact syntax.
    let scene = sceneContainer.rootNode as! GameScene?
    scene?.scaleMode = .aspectFit
    let push = SKTransition.push(with: SKTransitionDirection.right, duration: 0.4)
    skView.presentScene(scene!, transition: push)
}

可以找到从 GKScene 获取 SKScene 的文档 here .

关于swift - 从另一个无法从 SKS 文件加载的 SKScene 呈现的 SKScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241064/

相关文章:

swift - ReactiveSwift : how to rebind (remove old bindings, 添加新的)?

swift - NSTimer 在此函数中无效时不会停止

swift - 使用 Swift 包管理器时出错

objective-c - 如何为项目中的单个文件禁用 ARC?

ios - 转移IOS应用程序后],没有找到 'xxxxxxxxxxxxxx'的配置文件Xcode

xcode - Xcode 中的 iOS 图表折线图不显示所有值。为什么?

ios - 切换标签后出现黑屏

ios - 如何更新函数内本地更新的值并将答案设置为函数外的全局变量?

c++ - 在 OSX 上使用 CMake 构建 Unity native 包

Swift 3 Marquee 标签通知在重复之前或在原位