简洁版本
是否存在一种设计模式,用于以不重叠的方式分配车辆标签,并使其尽可能靠近其所指的车辆?如果没有,我建议的任何一种方法可行吗?您将如何自己实施?
扩大的视野
在我写的游戏中,我对空中载具有鸟瞰图。在每辆车旁边,我还带有一个小标签,上面标有有关该车的关键数据。这是一个实际的屏幕截图:
现在,由于车辆可能在不同的高度飞行,它们的图标可能会重叠。但是,我永远都不要让它们的标签重叠(或者,车辆“ A”的标签与车辆“ B”的图标重叠)。
目前,我可以检测到小精灵之间的碰撞,并且只需沿与否则重叠的小精灵相反的方向推开有问题的标签即可。这在大多数情况下都可行,但是当空域变得拥挤时,即使有其他“更智能”的选择,标签也可能被推离其飞行器很远。例如我得到:
B - label
A -----------label
C - label
在哪个地方会更好(=标签离车辆更近):
B - label
label - A
C - label
编辑:还必须考虑到,在重叠车辆的情况下,可能还有其他配置,其中车辆的标签可能会重叠(例如ASCII艺术示例显示了三辆非常接近的车辆,其中的标签A
会与的图标重叠B
和C
)。
我有两个关于如何改善当前状况的想法,但是在花时间实施它们之前,我曾想过向社区征询建议(毕竟,这似乎是一个“常见的问题”,可能存在一种设计模式)。
对于它的价值,这是我在想的两个想法:
标签空间的插槽化
在这种情况下,我会将所有屏幕划分为标签的“插槽”。然后,每辆车始终将其标签放置在最近的空车上(空=该位置没有其他精灵。
螺旋搜索
从屏幕上车辆的位置开始,我将尝试将标签以递增的角度放置,然后以递增的半径放置,直到找到不重叠的位置。在以下方面:
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...