2011-09-01 43 views
4

我正在研究架空射击游戏,随着时间的推移,随着时间的推移,当我在场馆周围移动时,敌人将开始堆叠在每个顶部除非他们是一个巨大的单位。它最终看起来很愚蠢。人工智能非常简单和基本:找到玩家,向他移动,如果他在范围内攻击他。防止实体在架空射击游戏中叠加在海誓山盟上

推动他们离开对方的最佳方式是什么,以便他们不会都在同一个地方结束?我认为植绒有点矫枉过正(可能过于密集,因为我一次在屏幕上会有100-200个敌人)。

想法?

谢谢!

回答

9

以下是你可以采取解决这个问题的几个不同的方法:

  1. 你可以定义一个势场为每一个“高度”或“坏”到每个位置上的关联单位地图。每个单位的移动方式都是尽量减少其潜力,可能是朝着将其移至最低潜力的方向迈出一步,可以一步到位。你可以定义潜在的功能,使其向玩家倾斜,使所有单位试图移动到玩家,但也是在现有单位周围非常高,导致单位避免相互碰撞。这是一个非常强大的框架,在AI中一直被利用;其中一个着名的例子就是其用于星际争霸的Berkeley Overmind AI,后者最终赢得了AI星际争霸比赛。如果你采用这种方法,你可能会调整潜在的功能来让AI以许多其他有趣的方式行事,并且可以轻松地支持植绒。我个人认为这是最好的方法,因为它是最灵活的。对于更先进的寻路模型来说,这也是一个很好的起点。对于非常有用关于AI潜在领域的很好和实用的介绍,请查看this website。要对潜在领域及其应用进行严格的数学介绍,您可能需要查看this paper使用潜在领域调查不同的AI方法。

  2. 如果您为每个敌人定义了一个边界圆,您可以通过防止任何两个单位在彼此的两个半径范围内明确禁止单位彼此堆叠。任何时候两个单位离得太近,你都可以阻止他们中的一个移动,或者让他们互相施加力量将它们分开。当两个单位相互碰撞时,你可以选择一个随机力矢量应用于每个单位,试图将它们分开。这是一个比潜在的领域更加黑客和不太优雅的解决方案,但是如果您需要启动并运行它,那绝对是一个可行的选择。

  3. 你可以选择单位周围玩家的一组点,然后让每个单位随机选择一个移动到的目标点。这会导致单位在玩家周围环形(或任何你想要的形状)上散布得更薄,避免你目前看到的巨大群众。再说一遍,这比使用潜在字段不太优雅,但如果你的目标是快速开展工作,那么这是另一个可以尝试的快速入门。

希望这有助于!

+0

+1;很好的选择,优先答案,援引参考(第一选项)。 –

+0

感谢您的答案 - 我有一些阅读要做! –

+0

+1为非常好的答案。我们使用了选项3的变体,用于我们的竞技场射击游戏Square Off。敌人周期性地重新计算他​​们的方向,通常朝向玩家(如果他们是可见的)或朝向AI节点(如果玩家不可见)。在那一点上,我们简单地增加了一个随机的速度垂直于他们的方向。这导致敌人通常向玩家移动,但避免了令人讨厌的聚集。是的,这是一个黑客攻击,但它是超级简单而高效的CPU。 – Aranda

相关问题