2017-09-29 23 views
0

我想更改我的瓷磚地圖中某些瓷磚的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的貼圖上,玩家仍然在貼圖上方。我想讓他在瓦片後面。我在這裏做錯了什麼?

+0

你不改變zPosition,你正在創建新的瓷磚,並將它們放在瓷磚地圖上,這是打算? – Knight0fDragon

+0

我剛剛通過蘋果文檔,我不認爲你可以改變瓷磚的z位置,我沒有看到他們的瓷磚定義中沒有這樣做。所以它看起來像你正在使用SKShapeNode在原始瓷磚上放置一個新的瓷磚,但你永遠不會指定SKShapeNode的顏色,所以它很可能是透明的 – Knight0fDragon

+0

哦是的,謝謝,現在我明白了爲什麼這不起作用..然後我必須使用SpriteNodes而不是瓷磚。感謝您的幫助! – Marcel

回答

1

中沒有任何允許z位置的變化(這將使意義,因爲這個想法是儘可能快地繪製磚)

我會建議有另一片集合覆蓋它,或者有個別的定義彈出的小精靈。

+0

我用一個單獨的瓷磚地圖作爲覆蓋層,感謝您的幫助! – Marcel