我試圖用四叉樹進行二維碰撞檢測,但我對如何實現它有點難住。首先,我會有一個四叉樹,其中包含四個子樹(一個代表每個象限),以及一個不適合單個子樹的對象集合。四叉樹用於二維碰撞檢測
當檢查樹碰撞的對象,我會做這樣的事情(感謝QuadTree for 2D collision detection):
- 檢查對象的碰撞與當前節點的任何對象。
- 對於其空間與對象重疊的任何子樹,遞歸。
要找到一個四叉樹中的所有碰撞:
- 入住針對當前節點互相對象的當前節點的每個對象。
- 檢查每個子樹中當前節點中的每個對象。
要插入一個四叉樹:
- 如果對象適合多個子樹,然後將其添加到當前節點,並返回。
- 否則,遞歸到哪個子樹包含它。
要更新的四叉樹:
- 遞歸到每個子樹。
- 如果當前節點中的任何元素不再完全適合當前樹,請將其移至父級。
- 如果當前節點中的任何元素都適合子樹,則將其插入子樹中。
這樣好嗎?可以改進嗎?
以您描述它的方式實現它,我已經按照這種方式和Dave O.完成它的方式來完成它,並且這更容易編碼並且更快。管理更多列表以跟蹤所有留下的內容,從而增加可避免的開銷。以下是我的一個版本的源代碼(使用Java): [Steerio](https://github.com/ClickerMonkey/steerio/blob/master/Java/src/org/magnos/steer/spatial/quad/SpatialQuadNode。 java) – ClickerMonkey 2013-09-12 16:41:04