代码中的 SKTileSet 磁贴变体访问

SKTileSet tile variant access in code

我目前有一个具有两个变体的 TileSet:Poison 和 NotPoison。我希望这些变体对被单击的反应不同,我还想遍历我的 TileMap 的各个行和列以计算 "Poison" 个 row/column 中的图块数量。我这样实现是因为这种tile类型占据了tileMap的一定区域。如何访问代码中的特定变体?是否可以改变变体之间的行为?

您可以在 Tileset 中添加 userData,方法是单击图像 Poison 并创建具有键和值的 userData 项,例如'isPoisonKey' 值为 1,数据类型为布尔值。然后在您的 gameScene.swift 代码中,您可以检查某个图块是否具有此 userData。

此示例遍历名为 backgroundSKTileMapNode 中的每一列/行,并在每次找到值为 [=17 的键 isPoisonKey 时打印到调试控制台=]

var backgroundLayer: SKTileMapNode!

override func didMove(to view: SKView) {
    guard let backgroundLayer = childNode(withName: "background") as? SKTileMapNode else {
        fatalError("Background node not loaded")
    }

    self.backgroundLayer = backgroundLayer

    for row in 0..<self.backgroundLayer.numberOfRows {
        for column in 0..<self.backgroundLayer.numberOfColumns {
            let backgroundTile = self.backgroundLayer.tileDefinition(atColumn: column, row: row)
            let isPoison = backgroundTile?.userData?.value(forKey: "isPoisonKey")

            if let countNode = isPoison as? Bool {
                // Code here
                if countNode {
                    print(countNode)
                }
            }
        }
    }
}