对于NPC& amp;& A&amp ;;没有瓷砖的角色

时间:2014-11-30 18:12:11

标签: objective-c ios7 sprite-kit path-finding

我一直在读一本名为" iOS Games by Tutorials" (推荐给任何有兴趣制作iPhone游戏的人)&我正在学习如何使用Sprite Kit制作带有俯视图的Tiled Maps(就像塞尔达链接的传说中的觉醒一样)。到目前为止,我已经使用32x32的平铺制作了平铺地图,放置了玩家角色和放大器。几个NPC进入了这个世界。甚至让NPC在地图上随机移动,尽管它在书中教导的方式是让它们从一块瓷砖移动到另一块(任何时候NPC周围的8块瓷砖中的任何一块 - 如果瓷砖有一些属性如此作为categoryBitMask然后它不会移动到那个图块。)

我要将NPC运动改为基于物理的(这是它自己的问题),就像玩家角色现在一样(这意味着NPC将与具有物理的物体碰撞,就像玩家角色一样) )。它更具流动性和安全性。动态的。

但这是问题的开始。我想在NPC& amp;中实现Pathfinding(例如A *算法)。玩家角色运动由于地图包含建筑物,水,树木等与他们自己的物理实体。限制NPC的随机移动或强迫他们走一条预定的路径(这会杀死这个游戏的重点)是一回事,但另一个问题是必须非常轻视屏幕。通常让玩家角色避开他必须经过的所有建筑物/树木。我不想使用网格系统。是否有可能将一些寻路算法实现为x,y坐标?这是否更加资源密集?你能分享一下你对此的想法吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

这是一个非常有趣的话题。

有连续空间中寻找路径的算法。例如,您可以使用基于潜在的方法,其目标具有非常低的潜力,并且障碍物是“丘陵”。 (也许是无限高,虽然这需要一点关心)。潜在方法的缺点是你必须采取特殊的预防措施,以防止它们陷入局部最低限度。像这样的情况

        P
 +----+
 |   M|
 |    |
 + ---+

如果M是试图进入玩家的怪物,则可能发生P.在该示例中,怪物处于局部最小值,并且为了离开建筑物左下方的门,它必须具有更高的潜力。潜在算法的一种变体(实际上,它通常用于将其减少为一个)是将反重力分配给障碍物并将重力分配给目标。这也有些不确定,需要采取特殊的预防措施,以避免陷入困境。

正如@rickster所指出的那样,SpriteKit提供了一个SKFieldNode类,可以帮助您实现基于潜在的解决方案。

其他方法包括"墙跟随" (例如,Pledge's algorithm),对于在像迷宫般的环境中寻找方法非常有用。

连续方法的一个缺点是NPC运动通常看起来有点不自然 - 例如,即使我们上面例子中的怪物能够决定它在局部最小值并增加&# 34;温度"它的搜索(也就是说,可能是随机的,对着潜在的渐变进行更大的移动),它会反弹而不是直接进入门。

在连续空间中搜索的另一种方法是量化空间。一种简单的方法是将其平铺,用多边形覆盖,或将其表示为quadtree。实质上,您希望有一种方法可以将连续空间中的每个点映射到表示量化空间的图形上的顶点。此时,像A *和朋友这样的图搜索算法是适用的。

图搜索在某种程度上是资源密集型的,但对于像游戏这样的2d zelda,它应该可以在移动设备上使用,特别是只有像#34;醒来等各种优化一样。在玩家一定距离内的NPC(想想仇恨)。

This page在实施细节方面有点薄弱,但它会为您提供适当的谷歌条款。

与往常一样,开始简单并迭代。平铺非常简单,并且可以让您在优化之前尝试图搜索方法。