代码之家  ›  专栏  ›  技术社区  ›  dlras2

网格的最优高密度二元空间划分

  •  4
  • dlras2  · 技术社区  · 14 年前

    我正在写一个游戏,其中一个角色在随机生成的地图上实时移动(如图所示),这给我带来了一个有趣的数据结构问题。地图是在它进入视图时生成的,在字符周围的一个圆圈中(可能是20-60个平铺),所以在有数据的地方,它是非常密集的,并且都在一个网格中。不过,在没有数据的地方,可能会有巨大的、未生成的空间。例如,角色可以在一个巨大的圆圈中行走,在巨大的空白空间周围创建一个瓷砖环。

    一个简单的矩阵将产生大量不必要的开销,并浪费大量的空间。不过,典型的bsp似乎会因为数据的密集、网格化特性而导致巨大的性能下降。

    你有什么建议?矩阵-四叉树-两者的混合体?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Biff MaGriff    14 年前

    我正在考虑在我的游戏中实现一些类似的东西。我将创建一个自定义类,它可以像2darray ex一样访问。 map[x][y] 但是底层数据类型更接近于哈希表。像这样的 data[x.Value.ToString() + "," + y.Value.ToString()]

    不过,我对一个更优雅的解决方案感兴趣:D

        2
  •  0
  •   dlras2    14 年前

    int .)

    基本上,它是一个二进制空间分区,它向上构建(而不是向下构建,就像四叉树一样)。如果写入当前分配的矩阵空间之外的点,它将生成一个更大的节点并展开。如果一个节点的大多数子节点都分配了矩阵,它会将它们聚合到自身中并删除它们的引用。这意味着您使用的边界越明确,性能就越好,因为此结构的行为越像矩阵。

    我把密码贴出来了 here ,并将尝试在未来编写一些演示,并转移到一个更好的托管网站。