swift - 使用 GameplayKit 在网格上查找路径

标签 swift sprite-kit game-physics path-finding gameplay-kit

我正在试验 Apple 的 GameplayKit、SpriteKit 和 Swift。我正在尝试通过只能从一侧通过的瓷砖进行寻路。

下图显示了两个问题:

enter image description here

左边是一个简单的解决方案,我知道如何从绿色位置移动到红色位置,因为我需要做的就是从绘制并计算路径。

图表的右侧让我感到困惑。假设我想要在其左侧有一堵墙的瓷砖(如图所示),但我仍然希望能够导航到有墙的瓷砖。我该如何告诉图形,只有从顶部、底部或右侧而不是左侧接近时,那些左侧有墙的瓷砖才可通过?

为了回应 Alessandro 的评论,我将解释代码的结构。我正在使用 iOS 10 中引入到 SpriteKit 的新 TileMapNode 来表示图 block map 。每个图 block 都是一个 SKTileDefinition。可以在 SKTileDefinition 上设置自定义属性(例如,我可以设置一个 Int 来表示瓷砖的顶部、底部、左侧或右侧是否有墙)。 map 的实际表示不如您使用 GameplayKit 寻找路径重要。据我所知,GameplayKit 只允许您从图中删除不可通过的节点,但我想做的是将一些节点标记为可通过,但只能从特定方向进行。

这让我觉得这是一个常见问题(因为很多游戏不必牺牲整个瓷砖来代表内墙)但我不知道如何去做。

最佳答案

你有几个选择:

1) 减小网格大小。薄壁的存在表明您的网格尺寸可以更小(按最小障碍物的顺序)

2) 使用不同的图形类型并完全放弃网格。 GKObstacleGraph 或 GKMeshGraph 非常适合具有许多任意多边形障碍物的游戏世界。

关于swift - 使用 GameplayKit 在网格上查找路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405918/

相关文章:

where 子句中的 Swift 元组

swift - 查看pdf文档

ios7 - 更改SKSpriteNode上的纹理

android - 我想为 android 和 ios 构建一个视频游戏应用程序,但我担心从哪里开始

ios - 检测 IAP 取消

swift - SpriteKit "START"在场景中调用 start() 的按钮

iphone - 无法移动 Sprite Kit 中的对象

objective-c - 动画与帧速率无关

Java 2D 平台游戏 重力

ios - 如何使用 heightForRowAtIndexPath 方法?