2016-10-27 11 views
0

В настоящее время у меня есть TileSet с двумя вариантами: Poison and NotPoison. Я хочу, чтобы эти варианты реагировали по-другому на клик, и я также хочу перебирать отдельные строки и столбцы моего TileMap, чтобы подсчитать количество «ядовитых» фрагментов в этой строке/столбце. Я реализовал его таким образом, потому что этот тип плитки занимает определенную область tileMap. Как я могу получить доступ к конкретному варианту кода? Можно ли изменить поведение между вариантами?Доступ к варианту использования плитки SKTileSet в коде

ответ

0

Вы можете добавить userData в Tileset, щелкнув по изображению Poison и создав элемент userData с ключом и значением, например. 'isPoisonKey' со значением 1 и dataType boolean. Затем в вашем коде gameScene.swift вы можете проверить, имеет ли у плитки эту userData.

Этот пример перебирает каждого столбца/строки в SKTileMapNode с именем background и печатает на консоли отладки каждый раз, когда он находит ключ isPoisonKey со значением true

var backgroundLayer: SKTileMapNode! 

override func didMove(to view: SKView) { 
    guard let backgroundLayer = childNode(withName: "background") as? SKTileMapNode else { 
     fatalError("Background node not loaded") 
    } 

    self.backgroundLayer = backgroundLayer 

    for row in 0..<self.backgroundLayer.numberOfRows { 
     for column in 0..<self.backgroundLayer.numberOfColumns { 
      let backgroundTile = self.backgroundLayer.tileDefinition(atColumn: column, row: row) 
      let isPoison = backgroundTile?.userData?.value(forKey: "isPoisonKey") 

      if let countNode = isPoison as? Bool { 
       // Code here 
       if countNode { 
        print(countNode) 
       } 
      } 
     } 
    } 
} 
+0

Что именно происходит, когда вы выполняете «сам .backgroundLayer = backgroundLayer? " – Taylor

+0

Это присваивает 'SKTileMapNode', который вы создали в файле' sks', переменной, чтобы он был доступен в быстром коде. –