我看到在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。
此方法将取消存档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)