在类似《魔兽争霸3》的游戏中寻找障碍物


10

考虑在基于图块的地图上进行A *搜索。直接的代码是:如果该单元格中有一个单元,则该单元不可访问,可以。

但是存在地图分辨率问题。当我研究《魔兽争霸3》时,那里的怪物和建筑物确实具有不同的半径,并且您可以走得很近,这更像是基于矢量的,这是如何实现的?

另外,将移动障碍物碰撞检测与路径查找算法(例如Warcraft 3)结合起来的标准解决方案是什么?


“基于向量的”是什么意思?
jcora 2011年

Answers:


7

我不能肯定地说WC3开发人员使用了哪种方法,但是它看起来很像分层注释A *。WC3Editor中定义的单位半径按原样用于3d模型缩放,但用于寻路的实际单位大小是离散的,可能类似于unitSize =(int)(unitRadius / 10)。这不是基于矢量的,这是肯定的。

假设有许多路径节点构成高分辨率节点网格。像食尸鬼这样的简单单位的大小为2,因此要将其放置在网格中的某个位置,我们需要4个彼此靠近的自由路径节点。死亡骑士的英雄稍大,大小为3,总共占据9条路径节点。现在,我们将2个ziggurats放在一起,在它们之间留出2个节点宽的空间,并在另一侧发送食尸鬼和死亡骑士。食尸鬼将能够在两条蛇形蜥蜴之间经过,而死亡骑士将不得不四处走动。如何确定?

为了查看节点是否可以容纳一个特定大小的单位,让我们为每个节点分配一个特殊的间隙值,以定义最大允许的单位大小。基本上,这意味着对一个节点进行了几次边界检查,并且最大可能的边界被记住为节点的间隙。因此,当我们要在某个节点上放置一个死亡骑士时,这就像将节点的间隙与死亡骑士的大小进行比较一样简单。当然,当有多个单元争夺节点时,事情将会变得更加复杂,但这是另一回事了。

有关更多详细信息,您可能需要查看这篇文章:

http://harablog.wordpress.com/2009/01/29/clearance-based-pathfinding/


4

它将使用曲面细分创建AKA导航网格的路径区域。本文通过完整的图表说明了这一概念。

您仍然可以保留A *作为寻路方法,但是您的网络不再是网格(4连通图),而是代表多边形区域之间任意连接的图。因此,您将不得不调整算法以适应。

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.