0

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

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

底线将每种瓷砖类型存储到文件中的最佳方法是什么?请记住,这些世界将是巨大的,因此文件必须很小。

谢谢!

4

1 回答 1

0

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

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

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

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

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

于 2012-02-06T20:00:16.277 回答