另一个SKScene提供的SKScene无法从SKS文件加载

时间:2017-04-05 20:31:28

标签: swift xcode

我有一个特定的问题。我曾经使用默认代码从视图控制器呈现我的游戏场景。然而,我添加了另一个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
            }
        }
    }

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

1 个答案:

答案 0 :(得分:1)

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

  1. 您正在创建两个不同的类,可能会有不同的代码。当您从SKScene出示时,您创建了GameScene类型的对象,但当您从UIViewController出现时,您创建了GKScene类型的对象。
  2. 当您创建GameScene类型的对象时,您使用的初始值设定项不会考虑附加的SKS文件。但是当你创建GKScene类型的对象时,你会这样做。
  3. 因此,我会将第一个代码块编辑为:

    //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)
    }
    

    可以找到SKScene GKScene获取<error-page> <!-- Mapping a 404 when user refreshes with an html5 push route--> <error-code>404</error-code> <location>/index.html</location> </error-page> 的文档。