如何计算移动对象周围的路径

时间:2011-01-16 13:45:42

标签: game-engine path-finding

我写了一个小游戏引擎,其中包含基于图块的地图和用于寻路的A *算法。但是我有一个问题,当2个物体碰撞并阻挡一个航路点时。他们来自相反的方向,所以他们不能再移动,永远不会到达他们的下一个航路点。 我想到了一些可能的解决方案,比如

  • 可移动物体不能与其他可移动物体碰撞
  • 重新计算标记已阻止磁贴的路径
  • 只计算下一个自由航点的路径,将每个具有可移动对象的磁贴标记为已阻止

我真的不想做第一种可能性,对于像动作这样的非动作游戏来说有点简陋。如果地图上有很多可移动的物体,最后两种可能性会变得很慢。 你觉得我该怎么办?顺便说一句,第一种可能性是在“Stronghold”中实现的,另外两种可以在任何新的策略游戏中找到。

1 个答案:

答案 0 :(得分:1)

当然没有单一的正确答案,但我可以分享我对类似问题的所作所为:

我同意,此时通过看起来很老。但是,如果您的对象小于导航网格,则可以使用边界框避免碰撞,而不会实际使路径无效。相对于较大的路径,避免碰撞小而局部。

如果这对你的游戏不起作用,添加积木通常是最好的方法。如果您担心寻路的成本,可以等到发生冲突,临时添加“块”和重新路径。另一种方法是仅定期插入块和重新路径。这可以提供自然的路径,并避免“移动前相互碰撞”,这看起来很奇怪。

成本很大程度上取决于您的A *算法。如果算法不缓存结果,那么块没有增量成本,并且您可以在有意义的情况下经常运行A *。例如:每帧运行一次A *并保留A *任务的队列。

如果您的算法确实缓存了结果,请尝试对A *计算进行分组,以便在移动块之前进行多次求解。