【问题标题】:How to store game objects in quadtree efficiently如何有效地将游戏对象存储在四叉树中
【发布时间】:2014-01-18 00:39:49
【问题描述】:

我正在实现一个四叉树结构,以简化碰撞代码。但我不确定这样做的最佳做法。目前,四叉树在设置过程中创建子树到预设的最大深度,然后我将对象插入其适当的树中,以用于对生成(实际的数学东西)。 但是,我听说过其他方法,它们仅在存储一定数量的对象时才生成子树。 我知道我的方法有空间开销,但在更新周期中计算速度可能更快。 处理它的最佳方法是什么?

【问题讨论】:

    标签: c++ quadtree


    【解决方案1】:

    一种方法是在每个节点中存储 k 个元素,从一个跨越整个碰撞空间的父节点开始。插入元素 k+1 时,您将空间细分并将新元素放置在正确的象限中。

    此外,您可以使用这种方法静态分配数据结构,假设您知道将使用的最大节点数,并且会有一些最大密度。这需要在应用程序的生命周期内分配一个固定的节点和元素数组,但它避免了代价高昂的动态分配,这应该是一个速度增益。

    【讨论】:

    • 喜欢溢出机制?
    • 是的,所以四叉树自适应扩展。这也很好,因为您可以只定义树中的每个节点以仅包含一组元素。在我自己的代码中,我有一个完全静态分配的四叉树,它假设有最大数量的节点。
    • 我明白你为什么会喜欢这种方法,因为它减少了内存占用。我的版本也很好用,但我想知道哪种方法应该有更高的性能。
    • 你的方法听起来已经很静态了,所以它可能没有太大的收获。我用更多信息更新了我的帖子,特别是我的方法不会提高空间性能。它是关于避免动态内存分配的。但是,树会根据数据的密度而增长,因此需要遍历的结构可能会稍微少一些。
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2011-12-16
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多