首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuadTree最终开始导致滞后

QuadTree最终开始导致滞后
EN

Stack Overflow用户
提问于 2013-09-20 18:46:56
回答 1查看 218关注 0票数 0

我试着把一个四叉树变成一个小项目,只是为了练习。我有几个粒子在半径内弹跳,一个四叉树被绑定到它所形成的圆上。

一切正常,除了我认为我的插入或清除有某种漏洞。在运行了大约10秒与1000个粒子,它开始严重滞后。

以下是功能

_subDivisions是数组,_drawableGameObjects是列表

代码语言:javascript
复制
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++;
                }
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 15:07:49

我发现了问题,但我忘了把这段代码排除在问题之外。

除了四叉树功能之外,我还在游戏层中跟踪每个四叉树。所以四人不仅是他们的父母,也是游戏层的孩子。当我删除四边形时,我是从他们的父方清除他们,而不是从他们的父游戏层中清除他们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18923784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档