Sprite kit 不使用SKS/场景文件创建/加载SKTilemapnode

Sprite kit 不使用SKS/场景文件创建/加载SKTilemapnode,sprite-kit,sktilemapnode,Sprite Kit,Sktilemapnode,我以编程方式创建我的精灵工具包游戏,而sks文件最终让我感到困惑 有没有一种方法可以在不使用sks/场景文件的情况下加载或创建平铺贴图节点?我找到了一种方法: 1创建一个名为tilemaps的SKS文件 2在那里创建所有地图 3添加此扩展以在当前场景中加载该场景文件: extension SKNode { class func unarchiveFromFile(file : NSString) -> SKNode? { if let path = Bundle.main.path

我以编程方式创建我的精灵工具包游戏,而sks文件最终让我感到困惑


有没有一种方法可以在不使用sks/场景文件的情况下加载或创建平铺贴图节点?

我找到了一种方法:

1创建一个名为tilemaps的SKS文件 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)

本节讨论如何使用在编辑器中创建的现有平铺集创建地图。本节讨论如何创建平铺集和地图。我想出了一种方法,首先添加此扩展:如果您添加解决方案作为答案,您可能会获得自学徽章!