执行此操作的方法是为游戏的图块定义一个图块组和相应的图块定义。这样做允许您在每个图块组的 userData 信息中定义特定标识符,以便您可以在代码中区分它们。
https://developer.apple.com/documentation/spritekit/sktiledefinition/1645813-userdata
例如,在您的游戏中,您可以创建一个与构成字母 A 的所有红色图块相对应的图块组。然后您可以在 userData 字典中为该图块类型设置一个自定义键来识别它。然后,每当玩家想要移动到新瓷砖时,检查代码中的键或键的值。您可以在变体的 tile 定义中的 Attributes Inspector 中直接设置 tile 的 userData 字典。
要检查的代码是这样的(假设您在 userData 字典中将布尔键 'letterA' 设置为 true:
let letterTile = myTileMap.tileDefinition(atColumn: column, row: row)
if letterTile.userData?.value(forKey: "letterA") == true {
// Allow the player to move to this tile as it's one of the letter A tiles.
}
编辑:
响应您的查询,您不必在代码中填充您的游戏地图/网格。为此,我假设您已经创建了一个游戏项目,其中已经预填充了 GameScene.sks。在这个文件中,您可以从对象库中删除一个“平铺地图节点”,然后您将使用编辑器添加您的平铺。
现在,带有用户数据的图块将来自 SpriteKit TileSet 资源文件,该资源文件也应该已添加到您的项目中。从当前的 Xcode (v11.3.1) 开始,默认的瓦片集带有预构建的瓦片,但没有什么能阻止您添加自己的自定义瓦片(字母 A 路线的红色瓦片)。然后,当您创建了切片组和切片定义后,您可以通过选择特定变体并在检查器窗口中添加键/值来修改其用户数据字典。
如果您不确定如何执行我在前 2 段中概述的过程,可以在线免费获得各种当前的 SpriteKit TileMap 教程。我相信他们可以在这方面进一步帮助你。
然而,必须编码的是检查特定图块中的 UserData 信息的实际逻辑,以便您可以根据需要限制玩家移动 - 我在原始回复中给出了一个示例。