2017-09-29 23 views
0

私のタイルマップの一部のタイルのz位置を変更したいと思います。私はこれを達成するために次の関数を使用します。タイルのz位置の変更

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」を示しています。これは、私がtileInfoパラメータとして使用するuserData名 "Z"で5つのタイルのzPositionを変更したいので正しいです。プレイヤースプライトのZPositionは10です。しかし、プレイヤーがzPosition 100のタイルを歩いていると、プレーヤーはまだタイルの上にあります。私は彼がタイルの後ろにいて欲しい。私はここで間違っていますか?

+0

zPositionを変更しておらず、新しいタイルを作成してタイルマップに配置する予定ですか? – Knight0fDragon

+0

私はちょうどApple Docsを見ましたが、私はあなたがタイルのz配置を変更することはできないと思っています。したがって、あなたはSKShapeNodeを使って元のタイルに新しいタイルを配置するように見えますが、SKShapeNodeの色を決して指定しないので、透明になる可能性が最も高いです – Knight0fDragon

+0

ああ、ありがとう、タイルの代わりにSpriteNodesを使う必要があります。助けてくれてありがとう! – Marcel

答えて

1

(アイデアはできるだけ速くタイルを描画することですので、理にかなって)ZPOSITION変更することができます定義の中では何も

は私がオーバーレイそれを設定し、別のタイルを持つお勧めします、または個々のを持っているでしょうがありませんスプライトが飛び出します。

+0

別のタイルマップをオーバーレイとして使用しました。 – Marcel

関連する問題