离屏敌人指标算法

时间:2011-07-08 06:24:29

标签: algorithm vector distance unity3d

所以我使用Unity来做这件事,但我不确定是否重要。

我有可见屏幕以外的敌人,我希望在屏幕一侧有指示符来表示它们的位置。那很好,但是有很多敌人,所以我想将它们分成blob。如同,而不是在彼此之上显示8个指标,我想要一个指标,旁边有一个(8)。

现在,我的算法是:

  • 最小博客范围是我设置的常量
  • 循环通过所有敌人
    • 检查已分配给blob的所有敌人的距离,如果在范围内,则分配给blob
    • 如果没有,请检查其他未分配的敌人,如果有任何在blob范围内,请制作一个blob

我每帧都这样做,感觉效率低下。我该怎么做才能改善这一点,并节省帧之间的处理。就像在,我可以用前一帧的数据来做得更好(因为blob成员变化的可能性非常低,但它肯定会有更新的位置)。

或者,我应该不再担心它并继续,因为它只是矢量数学,并不会真正导致引擎出现问题。

2 个答案:

答案 0 :(得分:2)

构造一个低分辨率网格,提供该区域的粗略视图。将每个敌人分配到适当的网格位置(应该可以直接计算)。显示每个占用网格位置的指示器;与一个敌人的位置获得单独的敌人指标,具有多个敌人的位置获得组指示。

在实践中,我希望稀疏表示比实际构建整个网格更有意义。

请注意,在检测碰撞时使用的概念基本相同。

ADDENDUM。稍作修改可能适用于纯粹的方向指标。如果你有两个相同方向的敌人,但距离不同,则网格方法会导致两个指示器在同一方向上。如果这是不合需要的,将轴承的计算基于敌人,将360度圆分成粗糙的楔形,就像所有区域相等的饼图一样。根据敌人所属的切片对敌人进行分组。

答案 1 :(得分:1)

就目前处理能力而言,你可能对目前的任何事情都很好。

对于使用遗传算法的邻近分组问题,有一种有趣的方法:http://www.cbu.edu/engineering/maesc/maesc03/FullPapers/d3-1-doc.pdf

此外,此链接看起来很有希望:K-means algorithm variation with equal cluster size

但老实说,我在数学方面做得很好,实际上给出了一个可靠的答案......