2015-09-04 41 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