我正在尝试使用Apple的GameplayKit,SpriteKit和Swift。我试图通过只能从一侧通过的瓷砖找到寻路的方法。
下图显示了两个问题:
左边是一个简单的解决方案,我理解如何从绿色位置移动到红色位置,因为我需要做的就是从图形中删除wall
节点(黑色轮廓方块)并计算路径。
图表的右侧让我感到困惑。假设我想要的是左侧有墙的瓷砖(如图所示),但我仍然希望能够导航到带墙的瓷砖。如何告诉图表,如果从顶部,底部或右侧而不是从左侧接近,那么在瓷砖左侧有墙壁的瓷砖只能通过?
为了回应Alessandro的评论,我将解释代码的结构。我正在使用iOS 10中引入SpriteKit的新TileMapNode
来表示平铺贴图。每个图块都是SKTileDefinition
。可以在SKTileDefinition
上设置自定义属性(例如,我可以设置Int
来表示是否在图块的顶部,底部,左侧或右侧有墙。地图的实际表示不如使用GameplayKit查找路径的方式重要。据我所知,GameplayKit只允许你从图中删除无法通行但我想要做的事情的节点我将某些节点标记为可通过,但仅限于特定方向。
这让我觉得这是一个常见的问题(因为许多游戏不必牺牲整个瓷砖来代表内墙)但我不知道如何去做它。
答案 0 :(得分:1)
您有几个选择:
1)减小网格尺寸。薄壁的存在表明您的网格尺寸可能更小(按最小障碍的顺序)
2)使用不同的图表类型并完全放弃网格。 GKObstacleGraph或GKMeshGraph非常适合具有多个任意多边形障碍物的游戏世界。