我想更改我的瓷磚地圖中某些瓷磚的z位置。我用下面的函數來實現這一目標:更改z位置tiles
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)
}
}
}
}
當我使用此功能,打印statetement顯示我5次「100」。這是正確的,因爲我想用userData名稱「Z」更改5個tile的zPosition,我將其用作tileInfo參數。玩家精靈的ZPosition爲10.但是如果我現在將玩家帶到zPosition 100的貼圖上,玩家仍然在貼圖上方。我想讓他在瓦片後面。我在這裏做錯了什麼?
你不改變zPosition,你正在創建新的瓷磚,並將它們放在瓷磚地圖上,這是打算? – Knight0fDragon
我剛剛通過蘋果文檔,我不認爲你可以改變瓷磚的z位置,我沒有看到他們的瓷磚定義中沒有這樣做。所以它看起來像你正在使用SKShapeNode在原始瓷磚上放置一個新的瓷磚,但你永遠不會指定SKShapeNode的顏色,所以它很可能是透明的 – Knight0fDragon
哦是的,謝謝,現在我明白了爲什麼這不起作用..然後我必須使用SpriteNodes而不是瓷磚。感謝您的幫助! – Marcel