2016-11-20 60 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")