data-structures - 可用于有效表示 Minecraft 世界的标准数据结构是什么?

标签 data-structures minecraft

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

9年前关闭。




Improve this question




我正在考虑每个 x、y、z 坐标的 3x3 矩阵。但这会浪费内存,因为很多块空间都是空的。另一种解决方案是使用哈希图 ((x,y,z) -> BlockObject),但这似乎也不太有效。

当我说高效时,我的意思不是最优。这只是意味着它足以在您的现代计算机上流畅运行。请记住,Minecraft 生成的世界非常庞大,无论如何效率都很重要。还有大量的元数据需要存储。

最佳答案

正如我在评论中所指出的,我不知道 MineCraft 是如何做到这一点的,但表示此类数据的一种常见有效方式是八叉树; http://en.wikipedia.org/wiki/Octree .一般的想法是它就像一个二叉树,但在三个空间中。您递归地划分每个维度中的每个空间块以获得八个较小的块,每个块包含指向较小块的指针和指向其父块的指针。

这使您可以高效地存储相同 Material 的大块(例如,“空白空间”),因为您可以在到达由所有相同内容组成的块时终止递归,即使您没有t 递归到单个“立方体”单元的级别。

此外,这意味着您可以有效地找到给定区域中的所有立方体,方法是获取当前块并沿着树向上爬足够远以到达包含您能看到的所有块的块 - 这样,您就可以非常轻松地忽略其他地方的所有立方体。

关于data-structures - 可用于有效表示 Minecraft 世界的标准数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152064/

相关文章:

c++ - 这会在哪些平台上崩溃,我该如何改进它?

Java - 数据结构设计 - 固定大小、随机访问、线程安全、排序集合

c++ - 如何分配一个二维 vector ?

c - C程序使用结构重新排列列表

java - 为什么 java (minecraft) 似乎正在重置我的变量?

java - 有传说的形状食谱?

swift - 如何使用 Swift 检测链表中的循环/周期

java - 如何修复,AL lib : (EE) alc_cleanup: 1 device not closed Java HotSpot(TM) 64-Bit Server VM warning:

java - Minecraft java 运行参数忽略 Assets

java - Minecraft 身份验证服务器返回 405