使用A *并且仍然避免冲突?

| 我正在设计一个塔防游戏,为此,我正在使用A *寻路算法从我的产卵区域到达目的地。 这里的问题是所有单元都堆叠在一起,看起来看起来不太好。有没有办法我可以使它们以某种方式分组,并且如果空间不足,可以散布更多? 该算法可以使所有单元一次移动一个图块。     
已邀请:
您可以使用羊群行为使它们遵循相同的一般路径,但不能相互叠加。 MS在此处提供了一个XNA示例:http://xbox.create.msdn.com/en-US/education/catalog/sample/flocking     

bab

我的一个朋友曾经为您可能听说过的著名的第一人称射击游戏进行AI设计,讲述了一个有关他们的寻路算法如何产生假象行为的故事。您会在受限的空间中向一群敌人投掷手榴弹,他们会互相撞撞,试图使所有人走上通往单个出口的有效道路。它看上去很哑,打破了幻想。 他们没有在更好的寻路上消耗宝贵的处理器周期,而是增加了一种启发式方法,即如果一群敌人逃跑,并且一个敌人连续短短两次撞到另一个敌人,敌人就会停止尝试逃跑,而是躲避掩盖,然后通常被手榴弹杀死。这让玩家感到非常满意,并且看起来更加逼真。 也许您可以在这里做类似的事情。如果太多的单元最终都朝着相同的路径相互碰撞,并且看起来不现实,那么您是否可以做一些便宜又简单的事情来检测情况并更改动画?     
您是否在每个时间步长都重新计算最短路径? 如果是:仅给瓷砖提供最多可站立的单位。如果已满,则不再有单位可以占用此图块。 如果否:依次计算每个单元的路径。给每个图块一个向量,告诉该图块何时被占用了其他单位(随后出现)。将此信息放入您的A *算法中。注意:这种方式的算法会慢很多。 我建议在每个步骤中重新计算最短路径。 编辑1 实际上,算法的复杂度在两种情况下都是相同的,但是,在我看来,情况1更容易实现。     
如果对许多爬行者占用的瓷砖加上罚款,则只要它们有移动的空间,它就可能会将它们隔开。 不过,它不再是最快的路径。这也可能使它们变得更加不可预测,这取决于您的目标难度是好是坏:)     
迭代寻路怎么样? 运行寻路算法,忽略重叠问题。这将找到最短的路径。 模拟蠕变运动。此模拟应以基于图块的运动运行,这样才能快速进行。 选择在一条直线上等待并且因此不移动的小兵的一半(对此进行小提琴)。重新为那些小兵重新运行算法,但在他们等待的位置增加额外的重量损失。该重量仅适用于具有额外重量的小兵。 重复第2-3步,直到满足某些条件为止,并注意前面的额外权重(对此不做任何准备)。 该算法将需要摆弄才能完全合并成有用的东西。但是,它具有使用预先计划的路径的优势,因此不会有任何循环或蠕动向后移动。它还允许您忽略诸如计时之类的事情,因此从概念上讲更简单。但是效率可能也较低。     

要回复问题请先登录注册