0

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

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

4

1 に答える 1

0

たとえば、関連付けられている をマップ エディタにSKTileMapNode追加すると、 を介してタイル定義にアクセスできます。あなたがこのような構造を持っている場合;SKTileMapNodeSKTileSetCountTiles.sks

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

SKTileMapNode次のような名前を呼び出す関数を使用して、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 に答える