Answers:
当您需要重新计算带有移动障碍物的路径时,有多种算法比A *快得多。见这里下“简单重新计算”。
但是,您不太可能为他们中的任何一个找到现成的解决方案,因此在99%的情况下,它们对于游戏而言是过大的。使用现有的,经过充分优化的A *解决方案,并使用现有的常见技巧来加快游戏中的寻路速度,可以节省您的时间:
等。您可以在本网站或Amit的A *页面上找到有关这些技巧的更多信息以及更多信息。
是。几乎在每种情况下A *仍然是必经之路。这是你的节点成本计算变得活跃,因此更复杂的计算和跟踪。
如果您已经知道将来移动的障碍物在哪里,您的A *可以在成本函数中考虑障碍物的时间性。
例如:将在4个滴答滴答声中到达此节点,从3号滴答声一直占据到6号滴答声,因此该节点的旅行成本为6-4 = +2个滴答声。那可能仍然是最佳途径。
还必须考虑障碍物的行进方向。
如果您不事先知道,则可以假设没有障碍,并在遇到障碍时重新计算路径,但是您将需要对死锁和活锁进行一些操作。(如果您可以预测障碍物的位置,但同样适用,但是它本身就是避免死锁/活锁的一种,足以满足您的目的。)
僵局是当两者等待对方移动而又没有移动时。
活锁是指当两者(或更重要的是-,这很重要)为了避免对方朝同一方向移动而最终来回移动而没有进展时。
解决活锁可能变得非常复杂,这完全取决于游戏的碰撞规则和机制(例如:它们是否应该战斗并摧毁障碍物?)。
通常会回到让您的移动物体安排节点/路径保留(当它们改变路径或死亡时不要忘记取消),以便其他移动物体可以提前计划。
获得这些信息后,您还可以计划拦截。