Bec*_*rum 4 c# algorithm xna artificial-intelligence
我正在研究一个头顶射手,随着时间的推移,当我在竞技场周围移动时,敌人会开始叠加在一起,直到他们成为一大堆单位.它看起来很傻.
人工智能是非常简单和基本的:找到玩家,向他移动,如果他在范围内就攻击他.
什么是将它们彼此远离的最佳方式,以便它们不会最终都在同一个地方?我认为植绒有点矫枉过正(因为我一次会在屏幕上有100-200个敌人,因此可能过于集中).
想法?
谢谢!
以下是您可以采取的一些不同方法来解决此问题:
您可以为每个单元定义一个潜在字段,将"高度"或"不良"与地图上的每个位置相关联.每个单元都以尽量减少其潜力的方式移动,可能是通过朝着将其移动到一步的最低潜力的方向迈出一步.您可以定义潜在的功能,使其向玩家倾斜,导致所有单位尝试移动到玩家,但在现有单位周围也非常高,导致单位避免碰撞到彼此.这是一个非常强大的框架,在AI中一直被利用; 一个着名的例子就是它在" 星际争霸"中用于伯克利Overmind AI,最终赢得了一场AI星际争霸比赛.如果你采用这种方法,你可能会调整潜在的功能,让AI以许多其他有趣的方式运行,并且可以轻松支持植绒.我个人认为这是最好的方法,因为它是最灵活的.它也是更先进的寻路模型的一个很好的起点.有关人工智能潜在领域的非常好的实用介绍,请访问该网站.对于潜在领域及其应用的严格数学介绍,您可能希望查看本文使用潜在领域调查不同的AI方法.
如果为每个敌人定义一个边界圆,则可以通过防止任何两个单位在彼此的两个半径之间来明确禁止单位堆叠在一起.任何时候两个单位太靠近,你可以阻止其中一个单位移动,或者可以让它们相互施加力量将它们分开.当两个单元相互碰撞时,您可以选择一个随机的力矢量应用于每个单元,以尝试将它们分开.与潜在领域相比,这是一个更加黑客和不太优雅的解决方案,但如果你需要获得一些东西并运行它绝对是一个可行的选择.
您可以选择单位试图移动的玩家周围的一组点,然后让每个单位随机选择其中一个目标点移动到.这将导致单位在玩家周围(或你想要的任何形状)更薄地传播,避免你到目前为止看到的巨大质量.同样,这比使用潜在字段更不优雅,但如果您的目标是快速完成某项工作,那么您可以尝试另一种快速入侵.
希望这可以帮助!