【问题标题】:Create/Load SKTilemapnode without using SKS/Scene files在不使用 SKS/Scene 文件的情况下创建/加载 SKTilemapnode
【发布时间】:2017-08-28 02:57:21
【问题描述】:

我以编程方式创建我的 sprite kit 游戏,而 sks 文件最终让我感到困惑。

有没有无需使用 sks/scene 文件即可加载或创建瓦片地图节点的方法?

【问题讨论】:

  • 这个post 讨论了如何使用在编辑器中创建的现有图块集来创建地图。
  • 这个post 讨论了如何创建图块集和地图。
  • 我想出了一个办法,先加这个扩展:
  • 如果您将解决方案添加为答案,您可能会获得Self Learner 徽章!

标签: sprite-kit sktilemapnode


【解决方案1】:

我想出了一个办法:

  • 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多