2016-11-20 19 views
0

私はCountTiles.sksという名前のファイルに定義されたTileSetを持っています。その中には、いくつかのバリエーションがあるタイルグループルールがあります。私のGameScene.swiftファイルでは、tileMapNodeに特定のバリアントを記入したいので、定義を含むsetTileGroupメソッドを使用すると思いましたが、それを呼び出すには、すでにその定義を変数に格納しておく必要があります。名前を使ってtileDefinitionを取得する方法はありますか?私が得ることができる唯一の方法は、それを特定のタイルにペイントし、セットアップ中にそのタイルから取得することです。これは望ましくない。SpriteKitを使用してSwiftの名前でTileDefinitionを取得

.sksファイルに設定されているtileDefinitionに、そのtileDefinitionの特定のインスタンスを持たずにアクセスする方法はありますか?

答えて

0

SKTileMapNodeなどのタイル定義にアクセスできます。 SKTileMapNodeをマップエディタに追加すると、関連付けられたSKTileSetが表示されます。したがって、CountTiles.sksにこのような構造がある場合は、

  • BackgroundTiles(タイルセット)
    • タイル(タイルグループ)
    • タイル(タイルグループルール)
      • Tile1(タイル定義)
      • Tile2(タイル定義)
      • タイル3(タイル定義)

たとえば、特定のタイル定義にアクセスすることができます。このようなbackgroundという名前のSKTileMapNodeを呼び出す関数を持つTile1;

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") 
関連する問題