【问题标题】:change zPosition of tiles改变瓷砖的zPosition
【发布时间】:2018-03-11 18:38:33
【问题描述】:

我想更改我的瓦片地图中某些瓦片的 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”。这是正确的,因为我想使用 userData 名称“Z”更改 5 个图块的 zPosition,我将其用作 tileInfo 参数。玩家精灵的 ZPosition 为 10。但如果我现在和玩家一起走过 zPosition 为 100 的图块,玩家仍然在图块上方。我希望他在瓷砖后面。我在这里做错了什么?

【问题讨论】:

  • 您不是在更改 zPosition,而是在创建新图块并将它们放置在图块地图上,这是故意的吗?
  • 我刚刚浏览了 Apple Docs,我认为您无法更改磁贴的 zPosition,我在它们的磁贴定义中看不到任何内容。所以看起来您正在使用 SKShapeNode 在原始图块上放置一个新图块,但您从未指定 SKShapeNode 的颜色,因此它很可能是透明的
  • 哦,是的,谢谢,现在我明白为什么这行不通了。然后我必须使用 SpriteNodes 而不是瓷砖。谢谢您的帮助!

标签: swift sprite-kit sktilemapnode zposition


【解决方案1】:

定义中没有任何内容允许更改 zPosition(这是有道理的,因为我们的想法是尽可能快地绘制图块)

我建议让另一个图块集覆盖它,或者让单个精灵弹出。

【讨论】:

  • 我使用了单独的瓦片地图作为叠加层,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多