Изменить zPosition плитки
Я хочу изменить zPosition некоторых плиток на моей карте тайлов. Я использую следующую функцию для достижения этой цели:
static func setZPosition(to tileMap: SKTileMapNode, and tileInfo: String){
let tileSize = tileMap.tileSize
let halfWidth = CGFloat(tileMap.numberOfColumns) / 2 * tileSize.width
let halfHeight = CGFloat(tileMap.numberOfRows) / 2 * tileSize.height
for column in 0..<tileMap.numberOfColumns{
for row in 0..<tileMap.numberOfRows{
let tileDefinition = tileMap.tileDefinition(atColumn: column, row: row)
let isCorrectTile = tileDefinition?.userData?[tileInfo] as? Bool
if isCorrectTile ?? false{
let x = CGFloat(column) * tileSize.width - halfWidth
let y = CGFloat(row) * tileSize.height - halfHeight
let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height)
let tileNode = SKShapeNode(rect: rect)
tileNode.position = CGPoint(x: x, y: y)
tileNode.zPosition = 100
tileMap.addChild(tileNode)
print(tileNode.zPosition)
}
}
}
}
Когда я использую эту функцию, заявление о печати показывает мне 5 раз "100". Это правильно, потому что я хочу изменить zPosition для 5 плиток с именем userData "Z", которое я использую в качестве параметра tileInfo. Спрайт игрока имеет ZPosition 10. Но если я сейчас иду с игроком по тайлу с zPosition 100, игрок все еще находится выше Tile. Я хочу, чтобы он был за плиткой. Что я тут не так делаю?
1 ответ
В определении нет ничего, что позволяло бы изменять zPosition (что имело бы смысл, поскольку идея состоит в том, чтобы рисовать плитки как можно быстрее)
Я бы порекомендовал использовать другой набор плиток или использовать отдельные спрайты.