在矩形数组中找到重叠的最快方法是什么?

时间:2012-11-16 19:54:34

标签: java 2d collision-detection slick2d

我正在闲暇时间做一个“游戏”,几乎纯粹是作为一种学习经历,并且正处于玩家实体和敌方实体之间的碰撞检测需要发生的地步。

玩家和所有敌人都共享一个基类Entity,这使他们可以访问x,y,height和width属性。使用这些,我可以为每个实体构建一个矩形,并尝试找到重叠。如果存在重叠,则发生碰撞。

因此,根据上面的逻辑,我们可以假装以下数据在矩形数组中:

X    Y    HEIGHT   WIDTH
------------------------
0    0    25       50
0    50   25       25
0    100  25       30
50   200  25       50
150  250  25       25
150  50   25       30

确定这些实体(矩形)是否与任何其他实体相交的最快方法是什么?简单地循环遍历数组并将每个元素与每个元素进行比较是不够的(O(n ^ 2))。还有更好的方法吗?

1 个答案:

答案 0 :(得分:6)

您想使用某种空间索引或结构,以便您快速找到彼此靠近的元素。

一种常用的数据结构是quadtree