我在業餘時間研究「遊戲」,幾乎純粹是作爲一種學習經驗,並且正處於玩家實體與敵方實體之間需要發生碰撞檢測的地步。在矩形數組中找到重疊的最快方法是什麼?
玩家和所有敵人共享一個基類,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))。有沒有更好的辦法?
我會創建一個粗粒度的「背景網格」。該對象將其自身註冊在與其重疊的粗粒度網格單元中。然後,您可以在每個課程粒度網格單元上執行O(n^2)。 (一般來說,它不應該超過每個單元中的幾個對象,所以在實踐中它將與O(n)「接近」) – aioobe
性能不夠好?你有多少個矩形? – dasblinkenlight
你是否需要知道哪一個是相交的,或者只有某些事情對你來說足夠了? –