【发布时间】:2010-09-11 14:08:42
【问题描述】:
有很多游戏通常可以看作是一堆散布在空间中的物体,一个很常见的操作是在一个子区域中挑选所有物体。典型的例子是在大地图上有大量单位的游戏,以及影响特定半径内单位的爆炸。这需要选择范围内的每个单位以应用爆炸的效果。
现在,有多种存储对象的方法可以有效地选择子区域。最简单的方法大概是把地图划分成一个网格;在一个区域中挑选单位将只选择受影响的网格部分,并进行细粒度的坐标检查,检查区域内不是 100% 的网格图块。
我不喜欢这种方法的地方在于回答“网格图块应该有多大?”太大了,效率可能会成为一个真正的问题。太小了,如果游戏世界足够大,网格会占用大量内存(如果游戏是 3d,则可能会变得荒谬)。甚至可能没有合适的中庸之道。
上述问题的明显解决方案是制作具有某种智能细分的大网格,例如伪树结构。正是在这一点上,我确定我对过早的优化还很遥远。 (然后有适当的动态四叉树/八叉树,但代码更复杂,我什至不相信它会表现得更好。)
所以我的问题是:上述问题有标准解决方案吗?在 STL 容器的行中,可以存储任何具有坐标的对象,并检索特定区域内的对象列表?它不必与我上面描述的不同,只要它是经过深思熟虑并被认为“足够好”的东西。
如果在 Python 中实现了该算法,则加分,但 C 也可以。
【问题讨论】:
标签: python c containers