将贴图变体添加到SKTileGroup

时间:2017-11-27 09:59:18

标签: ios swift sprite-kit sktilemapnode

如何添加瓷砖变体(例如,我想要一个普通的草砖,然后是一个带有花朵的草砖,另一个带有红色花朵等)到我的SKTileGroup?

这是我的SKTileGroup声明

let grass = SKTileDefinition(texture: SKTexture(imageNamed: "grass"), size: CGSize(width: 64, height: 64))
let tileGroup = SKTileGroup(tileDefinition: grass)

2 个答案:

答案 0 :(得分:1)

你绝对可以通过硬编码实现这一目标,但如果您只是创建一个SpriteKit Tile Set文件,您可以直观地完成所有文件,并通过拖放资产添加磁贴变体,这样做会容易得多。从那里,您还可以轻松编辑您可能需要的任何内容,例如平铺组中的放置权重等。

答案 1 :(得分:0)

Apple实际上有一个预设文件可以帮助您。它称为“ SpriteKit Tile Set”。使用此文件,您可以填写每个可能的图块方向,并在图块地图中使用每个图块时遵循正确的规则。

Image 1

如您所见,该文件允许您根据图块的类型选择特定的类型。 (等轴测像是部落冲突,等轴测像是进入大炮,还是六边形像是文明)

这非常简单直观。您只需将每张图像拖放到其相应的插槽中,并确保每张图像都位于Assets.xcassets文件夹中。

Image 2

该文件甚至已经包含一些图块组,因此您可以查看它们的功能。

其中的每一个都被视为图块集。一个图块集包含一个(或多个)图块组。

Image 3

每个图块集可以根据需要包含任意数量的图块组。

其中的每一个都被视为图块组。拼贴组包含使拼贴集可用的所有图像。

Image 4

要访问您决定添加的任何图块,需要访问存储图块组的图块集。瓦片集被认为是数组,可以这样访问。

//First, we need to access the tile set where the tile groups are being stored.
let tiles = SKTileSet(named: "Sample Grid Tile Set")
let tileGroups = (tiles?.tileGroups)!

//next, we access each tile group and define them.
let grass = (tileGroups.first(where: {$0.name == "grass"}))!
let sand = tileGroups[1]
let cobblestone = tileGroups[2]
let water = tileGroups[3]

//then we collect each tile group into another tile set and put that tile set into the tile map.
let tileSet = SKTileSet(tileGroups: [water,grass,sand,cobblestone])

tileMap = SKTileMapNode(tileSet: tileSet, columns: mapWidth, rows: mapHeight, tileSize: CGSize(width: 32, height: 32))