【问题标题】:Best Storage Method最佳储存方法
【发布时间】:2012-02-06 19:54:18
【问题描述】:

所以我正在制作一个基于沙盒图块的 2D 游戏,例如 Terraria。我已经知道如何生成像它这样的巨大世界,但是我对如何存储世界感到困惑。我知道我应该存储原始字节以保持文件较小。我正在考虑让每个图块都有自己的字节,但是我不知道该怎么做。我确实知道一个 ASCII 字符是一个字节,所以为什么不让每个图块都变成一个不同的 ASCII 字符呢?就像草是'G',泥土是'D',石头是'S'。然后我可以将每个字符存储到一个文件中并收工。不知道这个方法好不好,有没有更好的方法?

然后假设前面的方法没问题,我还需要知道 .NET 字符和字节是否可以很好地配合使用。我的意思是,如果我将一个简单的 ASCII 字符(例如草砖的“G”)转换为一个字节,那将是一个字节还是更多?也许 .NET 将 char 存储为大于我不知道的字节的东西。

最重要的是,将每种图块类型存储到文件中的最佳方式是什么?请记住,这些世界将是巨大的,因此文件必须很小。

谢谢!

【问题讨论】:

    标签: char byte storage file-storage


    【解决方案1】:

    我无法帮助您了解 .NET 的细节,但如果您使用字符并将世界存储为一个巨大的 ascii 字符串,这将取决于它在磁盘上的存储方式。这可能会使从单字节转换为您正在使用的字符代码变得更简单。

    其次,您需要对数据进行分块,否则您将难以加载其中的特定部分,例如尝试在旧黑胶唱片上查找曲目。

    就概念而言,您应该为每种图块类型使用静态类。这样,系统就不会为数千个单字节对象复制与类相关的数据。然后字节值是对包含所有这些静态对象的堆栈的引用。

    如果这看起来像是一个深奥的秘密,那不是;这被认为是 OO 编程中实现一副纸牌的正确方法。由于卡片实际上并不包含很多意外或独特属性(它们可能有位置或方向,但可以存储在您正在构建的游戏中的插槽中)任何游戏中的所有卡片都可以包含 52 张卡片静态对象和所有的卡片组/画面/堆栈只是对这些静态对象的引用数组。

    希望这对您的概念有所帮助,祝您好运!

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 2012-12-21
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2021-12-22
      • 2013-01-18
      相关资源
      最近更新 更多