最佳存储方法



所以我正在制作一款基于2D沙盒瓷砖的游戏,比如Terraria。我已经知道如何生成这样的巨大世界,但我对如何存储世界感到困惑。我知道我应该存储原始字节以保持文件大小较小。我想让每个瓦片都有自己的字节,但我不知道如何做到这一点。我知道一个ASCII字符是一个字节,所以为什么不让每个瓦片都是不同的ASCII字符呢?就像草是"G",泥土是"D",石头是"S"。然后我可以将每个字符存储到一个文件中,并称之为一天。我不知道这种方法是否可行,或者是否有更好的方法?

然后假设前面的方法是可以的,我还需要知道.NET字符和字节是否可以很好地一起使用。我的意思是,如果我将一个简单的ASCII字符(如草瓦片的"G")转换为一个字节,它是一个字节还是更多?也许.NET存储的字符比我不知道的字节还大。

最重要的是,将每个磁贴类型存储到文件中的最佳方式是什么?请记住,这些世界将是巨大的,所以文件必须很小。

谢谢!

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

其次,你需要对数据进行分组,否则你很难加载其中的特定部分,比如试图在旧黑胶唱片上找到一首曲目。

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

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

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

最新更新