2016-11-20 34 views
0

我在名为CountTiles.sks的文件中定义了一个TileSet。我有一个瓦片组规则,有几个变种。在我的GameScene.swift文件中,我想填充一个tileMapNode将特定的变体,所以我想我会使用包含定义的setTileGroup方法,但要调用它,我需要将该定义存储在变量中。有没有办法使用它的名字来获得tileDefinition?我似乎可以得到它的唯一方法是将它绘制成特定的瓷砖,并在安装过程中从该瓷砖中获取。这是不可取的。使用SpriteKit在Swift中获取TileDefinition的名称

有什么办法可以访问已经在.sks文件中设置的tileDefinition,而不需要该tileDefinition的特定实例吗?

回答

0

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

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

您可以访问特定的图块定义,例如Tile1具有调用SKTileMapNode的功能,其名称为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")