2015-09-04 61 views
0

我想知道是否有可能找出Rect是否与另一个Rect发生碰撞。问题是我不知道该Rect在哪里。Rect和另一个未知Rect之间的碰撞

  1. 我有一个Rect左右移动(我知道它在哪里)。

  2. 我在同一个“地图”上有很多其他Rects。

  3. 我不想在地图上制作所有Rects的列表,然后尝试与每个人碰撞。

没有人有在这种情况下对于带矩形并返回所有其他Rects与它相撞的列表功能的想法? (没有使用所有现有Rects的collideRect函数?)

我可以以某种方式“扫描”第一个矩形的区域,并且如果在同一个“斑点”中存在另一个矩形,我将返回另一个矩形?

我想出了什么至今...

+0

所以你基本上想检查一个'Rect'与另一个'Rect'碰撞而不检查它们碰撞? – sloth

回答

1

在某些时候,你将需要检查,看看是否矩形与任何其他矩形碰撞。考虑到这一点,有一些方法可以加快速度,主要依靠对Rects进行分组。

例如,假设这些Rects是水平中不会四处移动的对象,您可以用X坐标对它们进行排序,并记住最大宽度。当你想运行碰撞检测时,从主Rect的左侧开始减去最大宽度,并循环直到Rect的右侧。任何超出该范围的Rects都不具有碰撞能力,因此不需要检查。或者,您可以将水平分成16个方格,并给每个方格一个在方格内所有Rects的列表。然后,只需确定主Rect位于哪个平方,并与其中的Rects进行比较即可。 (当然有逻辑重叠。)

有很多方法可以做到这一点。

+0

但我该如何处理移动Rects?就像改变他们的x/y常数一样,我无法一直诉诸于这个列表。我想这个关卡的划分将是一个想法,不知道如何解决它 – Cribber

+0

移动Rects,然后度假/重新分类它们?除非它们移动很多,否则它们在几帧内不会失去太多的顺序,所以您可以添加最大移动距离,并且每N帧只重新进行一次排序。 – user3757614