QuadTree最终开始导致延迟

时间:2013-09-20 18:46:56

标签: c# xna quadtree

我正在尝试将四叉树实现为一个小项目来练习。我有几个粒子在一个半径内反弹,一个四叉树被绑定到它形成的圆圈。

一切正常,但我认为插入或清除时存在某种泄漏。用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++;
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我发现了这个问题,但我无意中遗漏了那段代码。

出于四叉树功能以外的目的,我在跟踪游戏层中的每个四边形。所以四边形不仅是他们的父四边形,也是一个游戏层。当我删除四边形时,我正在从父四边形中清除它们,而不是从它们的父游戏层清除它们。