屏幕外敌人指示器算法

Posted

技术标签:

【中文标题】屏幕外敌人指示器算法【英文标题】:Off-screen enemy indicator algorithm 【发布时间】:2011-10-01 00:43:19 【问题描述】:

所以我正在使用 Unity 来执行此操作,但我不确定这是否重要。

我的敌人不在可见屏幕上,我想在屏幕的一侧有指示符来指示它们的位置。没关系,但是有很多敌人,所以我想将它们分组。例如,我想要 1 个指标,旁边有一个 (8),而不是显示 8 个指标。

所以现在,我的算法是:

最小博客范围是我设置的常数 遍历所有敌人 检查与已分配到斑点的所有敌人的距离,如果在范围内,则分配给斑点 如果没有,检查其他未分配的敌人,如果有在blob范围内,则制作一个blob

我每帧都这样做,感觉效率低下。我能做些什么来改善这一点并节省帧之间的处理。例如,我可以如何处理前一帧的数据以使其变得更好(因为 blob 成员更改的可能性非常低,但它肯定会有更新的位置)。

或者,我应该停止担心它并继续,因为它只是矢量数学,它不会真的给引擎造成问题。

【问题讨论】:

我不太清楚你的指标。你是在指示位置还是只是方向?也就是说,你想要一种显示粗略位置的雷达,还是一个指向敌人位置而不给出范围的箭头? 只是边缘的一个箭头 --> 表明它们来自哪里以及有多少。 如果两个敌人在同一方向,但射程不同,是否应该分到一个组? 是的,我会考虑那些谨慎的 blob,用户会想知道它们是单独的波。如果我以后愿意的话,这很容易改变,只需按角度距离而不是实际距离分组。 【参考方案1】:

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

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

请注意,在检测碰撞时使用了基本相同的想法。

ADDENDUM。 对纯粹的方向性指标进行少量修改可能是合适的。如果你有两个敌人在同一个方向,但距离不同,网格方法会导致两个指标在同一个方向。如果这是不可取的,则根据对敌人的方位进行计算,将 360 度圆分成粗楔形,就像所有面积都相等的饼图。根据敌人属于哪一块馅饼对敌人进行分组。

【讨论】:

【参考方案2】:

就处理能力而言,您可能对目前拥有的任何东西都满意。

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

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

但老实说,我的数学足够好,可以给出一个可靠的答案......

【讨论】:

谢谢约翰,绝对值得深思!

以上是关于屏幕外敌人指示器算法的主要内容,如果未能解决你的问题,请参考以下文章

急!!!!!笔记本外接一个显示器,但是分屏幕的分辨率只能设置在640*480.

应用进入后台时避免外接显示器显示原生 iOS 屏幕

笔记本外接屏幕显示器设置2K分辨率

macbook外接显示器怎么关闭

windows10下笔记本电脑外接显示器设置

笔记本外接显示器分辨率怎么设置