【问题标题】:Collision between Rect and another unknown RectRect 与另一个未知 Rect 之间的碰撞
【发布时间】:2015-09-04 19:25:12
【问题描述】:

我想知道是否有可能找出一个 Rect 是否与另一个 Rect 发生碰撞。问题是我不知道其他 Rect 是什么/在哪里。

  1. 我有一个 Rect 可以四处移动(我知道它在哪里)。

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

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

在这种情况下,有没有人对一个函数有一个想法,该函数接受一个 Rect 并返回一个与它发生冲突的所有其他 Rect 的列表? (不对所有现有的 Rect 使用 collideRect 函数?)

我能否以某种方式仅“扫描”第一个 Rect 的区域,如果在同一个“点”中有另一个 Rect,我返回另一个 Rect?

到目前为止,我什么都没想到......

【问题讨论】:

  • 所以你基本上想检查一个Rect是否与另一个Rect碰撞而不检查它们是否碰撞?

标签: python pygame collision rect


【解决方案1】:

在某些时候,您需要检查 Rect 是否与任何其他 Rect 发生冲突。考虑到这一点,有一些方法可以加快速度,基本上是依靠对 Rect 进行分组。

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

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

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

【讨论】:

  • 但是如何处理移动的矩形?就像改变他们的 x/y 常数一样,我不能一直使用这个列表。我想关卡的划分将是一个想法,我不知道如何弄清楚
  • 移动矩形,然后重新分类/重新分类?除非它们经常移动,否则它们不会在几帧内出现太多乱序,因此您可以添加最大移动距离,并且每 N 帧仅重做一次排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
相关资源
最近更新 更多