我正在尝试使用四叉树进行2D碰撞检测,但我对如何实现它感到有些困惑。首先,我会有一个四叉树,其中包含四个子树(每个象限都代表一个),以及一组无法放入单个子树中的对象。
在树中检查碰撞物体时,我会像这样做(感谢QuadTree for 2D collision detection):
- 检查当前节点中的任何物体是否与该物体发生碰撞。
- 对于空间与对象重叠的任何子树,都要进行递归。
在四叉树中查找所有碰撞的步骤如下:
- 将当前节点中的每个对象与当前节点中的其他对象进行碰撞检查。
- 将当前节点中的每个对象与每个子树进行碰撞检查。
将对象插入四叉树时:
- 如果该对象适合多个子树,则将其添加到当前节点并返回。
- 否则,递归到包含该对象的子树中。
更新四叉树的方法如下:
- 对每个子树进行递归。
- 如果当前节点中的任何元素不再完全适合当前树,则将其移动到父节点。
- 如果当前节点中的任何元素适合于子树,则将其插入到子树中。
这样做可以吗?有什么优化的空间吗?