2017-09-29 8 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"을 보여줍니다. 이것은 타일 인포 파라미터로 사용하는 userData 이름 "Z"로 5 개의 타일의 z 위치를 변경하고자하기 때문에 정확합니다. 플레이어 스프라이트의 ZPosition은 10입니다.하지만 플레이어가 zPosition 100이있는 타일 위로 걸어 가면 플레이어는 여전히 타일 위에 있습니다. 나는 그가 그 타일 뒤에 있기를 바란다. 내가 여기서 뭐하고 있는거야?

나는 다른 타일 세트 오버레이에게 그것을 가지고 추천 또는 개별 것 (아이디어는 가능한 한 빨리 타일을 그릴 수 있기 때문에 의미가 것이다) zPosition 변경을 허용 정의에 아무것도

+0

zPosition을 변경하지 않고 새 타일을 만들고이를 타일 맵에 배치하는 것은 의도 된 것입니까? – Knight0fDragon

+0

방금 ​​Apple Docs를 훑어 보았습니다. 타일의 z 위치를 변경할 수 있다고 생각하지 않습니다. 타일 정의에 아무것도 보이지 않습니다. 그래서 당신이 원래 타일 위에 새로운 타일을 배치하기 위해 SKShapeNode를 사용하는 것처럼 보이지만, SKShapeNode에 대한 색상을 결코 지정하지 않으므로 투명성이 가장 높습니다. – Knight0fDragon

+0

오, 고마워요. 왜 이것이 작동하지 않는지 보겠습니다. 타일 ​​대신 SpriteNodes를 사용해야합니다. 도움에 감사드립니다! – Marcel

답변

1

없다 튀어 나오는 스프라이트.

+0

오버레이로 별도의 타일 맵을 사용했습니다. 도움을 주셔서 감사합니다! – Marcel