更改瓷砖的zPosition

时间:2017-09-29 19:41:55

标签: swift sprite-kit sktilemapnode zposition

我想在我的瓷砖地图中更改某些瓷砖的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个tile的zPosition,我将其用作tileInfo参数。玩家精灵的ZPosition为10.但是如果我现在带着玩家在zPosition 100的牌面上行走,玩家仍然在牌之上。我希望他能在瓷砖后面。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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