如何将.sks文件链接到SpriteKit中的.swift文件

时间:2015-02-23 23:42:11

标签: swift sprite-kit xcode6

我在XCode 6中看到有一个内置的级别编辑器。我找不到很多关于如何使用它或它如何工作的文档,但我能够弄清楚如何使用它来制作SKSpriteNodes,然后使用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添加的任何内容都没有出现在模拟器中。请帮助,我花了几个小时研究解决方案。我能找到关于关卡编辑器的极少数教程和论坛只讨论了以新的SpriteKit项目开头的GameScene.swift和.sks。

2 个答案:

答案 0 :(得分:5)

此方法将取消归档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)

答案 1 :(得分:2)

到答案的时候(Xcode 8.2.1),'简单'这样做的方法是: 在Project Navigator上选择.sks文件,以便显示图形编辑器。然后前往公用事业区(右侧),在#34; Custom Class Inspector"标签; "自定义类"字段,在.swift文件中键入类的名称。