我正在尝试将四叉树实现为一个小项目来练习。我有几个粒子在一个半径内反弹,一个四叉树被绑定到它形成的圆圈。
一切正常,但我认为插入或清除时存在某种泄漏。用1000粒子跑了大约10秒后,开始出现可怕的延迟。
以下是功能
_subDivisions是一个数组,_drawableGameObjects是一个列表
public void Clear()
{
_drawableGameObjects.Clear();
if (_subDivisions != null)
foreach (QuadTree quad in _subDivisions)
quad.Clear();
_subDivisions = null;
}
public void Insert(DrawableGameObject drawableGameObject)
{
if (_subDivisions != null)
{
int index = GetIndex(drawableGameObject);
if (index > -1)
_subDivisions[index].Insert(drawableGameObject);
return;
}
_drawableGameObjects.Add(drawableGameObject);
if (_drawableGameObjects.Count > _maxObjects && _level < _maximumLevel)
{
Subdivide();
int i = 0;
while (i < _drawableGameObjects.Count)
{
int index = GetIndex(_drawableGameObjects[i]);
if (index > -1)
{
DrawableGameObject currentObject = _drawableGameObjects[i];
_subDivisions[index].Insert(currentObject);
_drawableGameObjects.Remove(currentObject);
}
else
{
i++;
}
}
}
}
答案 0 :(得分:0)
我发现了这个问题,但我无意中遗漏了那段代码。
出于四叉树功能以外的目的,我在跟踪游戏层中的每个四边形。所以四边形不仅是他们的父四边形,也是一个游戏层。当我删除四边形时,我正在从父四边形中清除它们,而不是从它们的父游戏层清除它们。