如何在 SpriteKit 中将 .sks 文件 link 转换为 .swift 文件

How do I link a .sks file to a .swift file in SpriteKit

我看到 XCode6 中有一个内置的关卡编辑器。我找不到很多关于如何使用它或它如何工作的文档,但我能够弄清楚如何使用它来制作 SKSpriteNodes 然后 link 使用 childNodeWithName 将它们 swift 文件().当你创建一个新的 SpriteKit 项目时,它以 GameScene.swift 和 GameScene.sks 开头。我能够使用它们在视觉上制作一个关卡,然后我可以在 GameScene.swift 中为其编写代码,但是当我尝试为一个新关卡制作自己的 .sks 和 .swift 文件时,我无法连接我制作的 .sks 和 .swift 文件。我尝试完全遵循本教程:

http://www.techotopia.com/index.php/An_iOS_8_Swift_Sprite_Kit_Level_Editor_Game_Tutorial#Creating_the_Archery_Scene

当我连接这两个文件时没有出现错误,然后当我转换到场景时它正确转换,但我在视觉上添加到 .sks 的任何内容都没有出现在模拟器中。请帮忙,我花了几个小时研究解决方案。我能找到的关于关卡编辑器的极少数教程和论坛只讨论了 GameScene.swift 和以新 SpriteKit 项目开头的 .sks。

此方法将取消存档 sks 文件并将其初始化为调用它的任何 SKNode 子类。这意味着您可以将文件取消存档为 SKNode(因此根节点将是 SKNode)并将其作为子节点添加到场景中。您还可以将文件取消归档为 GameScene 或任何 SKNode 子类。

extension SKNode {
    class func unarchiveFromFile(file : NSString) -> SKNode? {
        if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
            var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
            var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

            archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
            let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKNode
            archiver.finishDecoding()
            return scene
        } else {
            return nil
        }
    }
}

这样使用:

let scene = GameScene.unarchiveFromFile("GameScene")! as GameScene

let levelStuff = SKNode.unarchiveFromFile("Level 1")!
self.addChild(levelStuff)

在回答此问题时 (Xcode 8.2.1) 'simple' 场景的处理方式:

  • Select 项目导航器中的 .sks 文件,以便显示图形编辑器
  • 转到公用事业区(在右侧)
  • 单击自定义 class 选项卡(图标看起来像名片)
  • 在“Custom class”中输入您的 .swift 文件中 class 的名称