0

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

这是我的 SKTileGroup 声明

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

2 回答 2

1

SpriteKit Tile Set您绝对可以通过硬代码来做到这一点,但如果您只是创建一个文件,您可以在其中直观地完成所有操作,并通过从资产中拖放来添加图块变体,这会容易得多。从那里您还可以轻松地编辑您可能需要的任何内容,例如图块组中的放置权重等。

于 2017-12-30T03:10:30.683 回答
0

苹果实际上有一个预设文件来帮助解决这个问题。它被称为“SpriteKit Tile Set”。此文件允许您填写每个可能的瓦片方向,并让每个瓦片在瓦片地图中使用时遵循正确的规则。

图 1

如您所见,该文件允许您根据您的图块选择特定类型。(像部落冲突一样的等距,像进入地牢一样基于网格,或者像文明一样的六边形)

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

图 2

该文件甚至附带了一些已在其中的图块组,因此您可以查看它们的功能。

这些中的每一个都被认为是一个瓦片集。一个瓦片集包含一个(或多个)瓦片组。

图 3

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

这些中的每一个都被视为一个瓦片组。瓦片组包含使瓦片集在瓦片地图中可用的所有图像。

图 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))
于 2018-09-10T19:49:44.290 回答