2012-02-06 103 views
0

所以我正在制作一个基于2D沙盒瓷砖的游戏,如Terraria。我已经知道如何生成像它这样的大规模世界,但是我很难理解如何存储这个世界。我知道我应该存储原始字节以保持文件大小。我正在考虑让每个磁贴都有自己的字节,但我不知道如何去做。我知道一个ASCII字符是一个字节,所以嘿为什么不让每个字符块变成一个不同的ASCII字符?像草有'G',污垢是'D',石头是'S'。然后我可以将每个字符存储到一个文件中,并在一天内调用它。我不知道这种方法是否可行或者是否有更好的方法?最好的存储方法

然后假设前面的方法没问题,我还需要知道.NET字符和字节是否可以很好地结合在一起。我的意思是,如果我将一个简单的ASCII字符转换成一个字节,就像一个字节,或者它会更多?也许.NET将char存储为比我不知道的字节更大的东西。

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

谢谢!

回答

0

我无法帮助您处理.NET细节,但是如果您使用字符并将世界存储为巨大的ascii字符串,则将取决于它如何存储在磁盘上。这可能会更简单地从单字节转换为您使用的字符代码。

其次,您需要将数据分块,否则您将难以加载其中的特定部分,例如试图在旧唱片上寻找曲目。

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

如果这看起来像一个深奥的秘密,它不是;这被认为是OO编程实现一副牌的正确方式。由于牌并不包含许多事故或特殊属性(它们可能有位置或方向,但可以存储在您正在构建的游戏的插槽中)任何游戏中的所有牌都可以由52张牌组成静态的对象和所有的deck/tableaus/stacks仅仅是这些静态对象的引用的数组。

希望这可以帮助你的概念,祝你好运!