代码中的 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。
此示例遍历名为 background
的 SKTileMapNode
中的每一列/行,并在每次找到值为 [=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)
}
}
}
}
}
我目前有一个具有两个变体的 TileSet:Poison 和 NotPoison。我希望这些变体对被单击的反应不同,我还想遍历我的 TileMap 的各个行和列以计算 "Poison" 个 row/column 中的图块数量。我这样实现是因为这种tile类型占据了tileMap的一定区域。如何访问代码中的特定变体?是否可以改变变体之间的行为?
您可以在 Tileset 中添加 userData,方法是单击图像 Poison
并创建具有键和值的 userData
项,例如'isPoisonKey' 值为 1,数据类型为布尔值。然后在您的 gameScene.swift
代码中,您可以检查某个图块是否具有此 userData。
此示例遍历名为 background
的 SKTileMapNode
中的每一列/行,并在每次找到值为 [=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)
}
}
}
}
}