Создать / загрузить 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)
Другие вопросы по тегам