我应该如何重新计划A *?


10

我有一个寻路的老板敌人,它使用A *算法寻找玩家。这是一个非常复杂的环境,我在Flash中进行操作,因此,如果在长距离搜索,搜索可能会变得有点慢。如果播放器静止不动,我只能搜索一次,但此刻我正在搜索每一帧。这花费了足够长的时间,以至于我的帧速率正在遭受痛苦。

通常的解决方案是什么?是否可以在不重新进行整个搜索的情况下“重新计划” A *?我是否应该减少搜索频率(每半秒或第二秒),并接受路径中的一些误差?

Answers:


13

您不必在一帧中搜索整个路径,我通过限制搜索循环来做到这一点,然后AI将开始跟踪它所拥有的少量信息,下一帧我将搜索更多,可能需要3帧才能找到路径。它看起来很有说服力,因为看起来AI实际上正在搜索。


+1。这也是Mat Buckland在他的AI书中所描述的。他称其为“时间切片路径规划”(books.google.ch/…)。好东西。
bummzack 2011年

8

如果距离很大,则可以使用接近检测每隔几帧运行一次算法(因为在大多数情况下,如果距离很大,则目标路径在帧与帧之间不会发生很大变化)。例如:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

这是假设在每帧运行A *时仍存在可接受的距离。简而言之,我会选择您的第二个选择。特别是如果您的工作正常,如果可以缩小工作范围,我将避免重新实现其他功能。最重要的是,您必须尝试一下它是否适用于您的游戏。


8

并没有真正回答您的确切问题,但是...如果您愿意“作弊”,则可以让玩家离开“面包屑”,让老板跟随他们。如果面包屑路径交叉,请遵循最新路径(这使老板避免循环和其他路径可能太长,更不用说不遵循玩家的确切路径了)

如果老板是某种具有良好嗅觉的动物,这将很好地工作。这就像跟随播放器的气味一样工作:)


5

您的案例几乎就是发明HPA *所要解决的问题。但是,如果这看起来过于矫kill过正,我会倾向于认为每半秒钟左右的寻路应该能很好地解决。


4

如果是静态环境,则可以预先计算所有对的最短路径。


2
如果是小型静态环境。

取决于可用的平台和内存。
Nate

@ Joe,@ Nate,是的。
彼得·泰勒

2

我为48场比赛创建了一个游戏,其中A *角色在某个级别上跟随玩家。因为我的A *实现速度很慢(无法在每个帧中运行),所以我将间隔设置为三秒的延迟。产生了意想不到的结果,使玩家可以“欺骗” AI一会儿。它实际上使游戏变得更加有趣。

后来,我改进了A *实现的性能,并尝试在每个帧上运行它。游戏停止了乐趣,因为敌人总是会完美地寻找玩家。

那是出乎意料的,也是一次很好的学习经历。


1
那是个很好的观点。我记得读过一篇关于吃豆人中寻路的知识,他们故意使用了不完善的算法,从而使玩家能够胜过幽灵。每个幽灵的瑕疵都略有不同,赋予它们更多的个性。这里的好处是在游戏中,乐趣>所有其他。
Nick Van Brunt

0

除非您绝对希望(或需要)使用A *,否则还可以查看“ 转向行为”。由于所涉及的每个帧都没有完整的路径规划,因此在处理上应该要轻得多。


在代理与其目标之间没有障碍的情况下,我会使用“指导行为”(特别是“寻求”)。不幸的是,我的环境包含诸如扭曲走廊之类的东西,因此需要更智能的解决方案。
Gregory Avery-Weir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.