2016-11-20 1 views
0

У меня есть TileSet, определенный в файле CountTiles.sks. При этом у меня есть правило группы плитки, которое имеет несколько вариантов. В моем файле GameScene.swift я хочу заполнить tileMapNode конкретными вариантами, поэтому я решил использовать метод setTileGroup, который включает определение, но для его вызова мне нужно иметь это определение, хранящееся в переменной. Есть ли способ получить имя tileDefinition с его именем? Единственный способ, которым я могу это понять, - это покрасить его в определенную плитку и получить ее от этой плитки во время установки. Это нежелательно.Получить TileDefinition по его имени в Swift с помощью SpriteKit

Есть ли способ получить доступ к tileDefinition, установленному в файле .sks, не имея конкретного экземпляра этого tileDefinition?

ответ

0

Вы можете получить доступ к определению плитки через SKTileMapNode, например. когда вы добавляете SKTileMapNode в Редактор карт, у него есть связанный SKTileSet. Поэтому, если ваш CountTiles.sks имеет такую ​​структуру;

  • BackgroundTiles (плитка Set)
    • плитки (плитка Group)
    • плитки (плитка Группа Rule)
      • Tile1 (Tile Definition)
      • Tile2 (Tile Definition)
      • 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") 
Смежные вопросы