2012-11-16 77 views
3

我在業餘時間研究「遊戲」,幾乎純粹是作爲一種學習經驗,並且正處於玩家實體與敵方實體之間需要發生碰撞檢測的地步。在矩形數組中找到重疊的最快方法是什麼?

玩家和所有敵人共享一個基類,Entity,這使他們能夠訪問x,y,高度和寬度屬性。使用這些,我可以爲每個實體構建一個矩形,並嘗試查找重疊。如果有重疊,則發生碰撞。

所以,與上述邏輯,我們可以假裝下列數據是在矩形數組:

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))。有沒有更好的辦法?

+0

我會創建一個粗粒度的「背景網格」。該對象將其自身註冊在與其重疊的粗粒度網格單元中。然後,您可以在每個課程粒度網格單元上執行O(n^2)。 (一般來說,它不應該超過每個單元中的幾個對象,所以在實踐中它將與O(n)「接近」) – aioobe

+1

性能不夠好?你有多少個矩形? – dasblinkenlight

+2

你是否需要知道哪一個是相交的,或者只有某些事情對你來說足夠了? –

回答

6

您想要使用某種空間索引或結構,以便您快速找到彼此靠近的元素。

一個常用的數據結構是quadtree

+0

分而治之。 –

+0

你能否詳細說明如何根據它們的x/y座標在四叉樹中構造附近的物體? (我有問題要看中心附近會發生什麼,根是與鄰居「葉細胞」最接近的共同祖先。) – aioobe

相關問題