Rect 与另一个未知 Rect 之间的碰撞

Collision between Rect and another unknown Rect

我想知道是否有可能查明一个 Rect 是否与另一个 Rect 发生冲突。问题是我不知道其他 Rect 是 what/where。

  1. 我有一个四处移动的矩形(我知道它在哪里)。

  2. 我在同一个 "map" 上还有许多其他 Rect。

  3. 我不想列出地图上的所有 Rect,然后尝试对每个 Rect 进行 collideRect。

在这种情况下,有没有人想到一个函数接受一个 Rect 并且 returns 是一个与它冲突的所有其他 Rect 的列表? (不对所有现有的 Rects 使用 collideRect 函数?)

我能否以某种方式 "scan" 只有第一个 Rect 的区域,如果在同一个 "spot" 中有另一个 Rect,我 return 另一个 Rect?

到目前为止我什么都想不出...

有时,您需要检查 Rect 是否与任何其他 Rect 发生冲突。考虑到这一点,有一些方法可以加快速度,基本上依赖于分组矩形。

例如,假设这些Rects是关卡中不会四处移动的对象,您可以按X坐标对它们进行排序,并记住最大宽度。当你想 运行 碰撞检测时,从主 Rect 的左侧减去最大宽度开始,循环直到 Rect 的右侧。超出该范围的任何 Rect 都没有碰撞能力,因此不需要检查。

或者,您可以将关卡划分为 16 个方块,并为每个方块提供一个包含方块内所有 Rect 的列表。然后,只需确定主要 Rect 在哪个方格中,并与那里的 Rects 进行比较即可。 (当然有重叠的逻辑。)

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