【发布时间】:2013-11-19 23:50:41
【问题描述】:
我正在克隆一个蜈蚣游戏,但现在我正在 PC 上编写它。
我想将蘑菇以随机的位置散布在屏幕上,但它们不应相互重叠。
这样做的最坏情况是 O(N^3) 算法,您检查一个蘑菇是否为其他蘑菇,然后检查距离或交叉点,然后再取另一个最佳随机位置。 使用 Actionscript 的伪代码在这里:
for (var i:int = 0; i < m_bricks.length - 1; i++)
{
for (var j:int = 1; j < m_bricks.length; j++)
{
if (i != j)
{
while (m_bricks[i].hitTestObject(m_bricks[j]))
{
m_bricks[i].x = int((Math.random() * 200) + 45);
m_bricks[i].y = int((Math.random() * 200) + 45);
}
}
}
}
这在 PC 上当然没问题,但我要把它移植到具有小功率微控制器的游戏机上)。
我知道解决方案是使用 tilemap,但有更好的策略来实现吗?
【问题讨论】:
-
网格或瓦片地图是保证比 O(n^3) 时间更快的唯一方法。唯一的另一种方法是存储实例化对象坐标的数组并进行简单检查以确保您的点与该数组中的任何点都不太接近。如果操作正确,那可能是 O(n) 或 O(n^2)。瓦片地图当然会保证 O(n)。