0

我在一个名为 CountTiles.sks 的文件中定义了一个 TileSet。在那我有一个有几个变体的图块组规则。在我的 GameScene.swift 文件中,我想填充一个 tileMapNode 将特定变体,所以我想我会使用包含定义的 setTileGroup 方法,但要调用它,我需要已经将该定义存储在一个变量中。有没有办法使用它的名字来获取 tileDefinition?我似乎可以得到它的唯一方法是将其绘制到特定的图块中,并在设置过程中从该图块中获取它。这是不可取的。

是否有任何方法可以访问已在 .sks 文件中设置的 tileDefinition,而无需该 tileDefinition 的特定实例?

4

1 回答 1

0

您可以通过SKTileMapNode例如当您添加SKTileMapNode到地图编辑器时,它具有关联的SKTileSet. 所以如果你CountTiles.sks有这样的结构;

  • BackgroundTiles(瓷砖集)
    • 瓷砖(瓷砖组)
    • 平铺(平铺组规则)
      • Tile1(瓷砖定义)
      • Tile2(瓷砖定义)
      • Tile3(瓷砖定义)

SKTileMapNode您可以使用调用这样命名的函数访问特定的 Tile 定义,例如 Tile1 background

func backgroundTileDefinition(key: String) -> SKTileDefinition {
    guard let backgroundLayer = childNode(withName: "background") as? SKTileMapNode else {
        fatalError("Background node not loaded")
    }

    guard let backgroundTile = backgroundLayer.tileSet.tileGroups.first(where: {$0.name == "Tiles"}) else {
        fatalError("TileSet not found")
    }

    guard let backgroundTileSetRule = backgroundTile.rules.first(where: {$0.name == "Tile"}) else {
        fatalError("Tileset rule not found")
    }

    guard let backgroundTileDefinition = backgroundTileSetRule.tileDefinitions.first(where: {$0.name == key}) else {
        fatalError("Tile definition not found")
    }

    return backgroundTileDefinition
}

像这样调用函数;

let backgroundTileDefinition = backgroundTileDefinition(key: "Tile1")
于 2016-11-21T03:06:49.913 回答