В настоящее время у меня есть TileSet с двумя вариантами: Poison and NotPoison. Я хочу, чтобы эти варианты реагировали по-другому на клик, и я также хочу перебирать отдельные строки и столбцы моего TileMap, чтобы подсчитать количество «ядовитых» фрагментов в этой строке/столбце. Я реализовал его таким образом, потому что этот тип плитки занимает определенную область tileMap. Как я могу получить доступ к конкретному варианту кода? Можно ли изменить поведение между вариантами?Доступ к варианту использования плитки SKTileSet в коде
0
A
ответ
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)
}
}
}
}
}
Что именно происходит, когда вы выполняете «сам .backgroundLayer = backgroundLayer? " – Taylor
Это присваивает 'SKTileMapNode', который вы создали в файле' sks', переменной, чтобы он был доступен в быстром коде. –