Создать / загрузить SKTilemapnode без использования файлов SKS/Scene
Я создаю свои игры Sprite Kit программно, и файлы SKS в конечном итоге просто сбивают меня с толку.
Есть ли способ загрузить или создать узел мозаичной карты без использования файла sks/scene?
1 ответ
Решение
Я нашел способ сделать это:
- 1) Создайте файл SKS с именем tilemaps
- 2) Создайте все свои карты там
3) Добавьте это расширение, чтобы загрузить этот файл сцены в вашу текущую сцену:
extension SKNode { class func unarchiveFromFile(file : NSString) -> SKNode? { if let path = Bundle.main.path(forResource: file as String, ofType: "sks") { let sceneData = NSData(contentsOfFile: path) let archiver = NSKeyedUnarchiver(forReadingWith: sceneData as! Data) archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! SKNode archiver.finishDecoding() return scene } else { return nil } }
}
Затем возьмите карту тайлов из файла sks. Странный трюк в том, что вы должны сначала удалить его из родительского:
guard
let tileScene = SKScene.unarchiveFromFile(file: "TileMaps"),
let testMap = tileScene.childNode(withName: "Dungeon1")
as? SKTileMapNode else {
fatalError("Background node not loaded")
}
self.testMap = testMap
self.testMap.removeFromParent()
self.testMap.zPosition = 1200
self.addChild(testMap)