所以我正在制作像Terraria这样的基于2D沙箱区块的游戏。我已经知道如何产生像它这样的大规模世界,但是我对如何存储这个世界感到难过。我知道我应该存储原始字节以保持文件大小。我正在考虑让每个磁贴都有它自己的字节但是我不知道如何做到这一点。我知道一个ASCII字符是一个字节,所以嘿为什么不使每个tile成为不同的ASCII字符?就像草是'G',污垢是'D',石头是'S'。然后我可以将每个字符存储到一个文件中并将其称为一天。我不知道这种方法是否合适或是否有更好的方法?
然后假设前面的方法没问题,我还需要知道.NET字符和字节是否可以很好地协同工作。我的意思是,如果我将一个简单的ASCII字符转换成一个字节,例如一个字段的'G',或者它会更多吗?也许.NET将char存储为比我不知道的字节大的东西。
底线将每种瓷砖类型存储到文件中的最佳方法是什么?请记住,这些世界将是巨大的,因此文件必须小。
谢谢!
答案 0 :(得分:0)
我无法帮助您使用.NET细节,但如果您使用字符并将世界存储为巨大的ascii字符串,则将取决于它如何存储在磁盘上。这可能会使从单字节转换为您正在使用的字符代码变得更加简单。
其次,您需要对数据进行分块,否则您将难以加载其中的某个部分,例如尝试在旧的黑胶唱片上查找曲目。
至于概念,您应该为每种tile类型使用静态类。这样,系统不会复制数千个单字节对象的类相关数据。然后,字节值是对包含所有这些静态对象的堆栈的引用。
如果这看起来像一个深奥的秘密,那就不是;这被认为是在OO编程中实现一副牌的正确方法。由于卡片并不真正包含许多事故或独特属性(它们可能有位置或方向,但可以存储在您正在构建的游戏中的插槽中)任何游戏中的所有卡片都可以包含52张卡片静态的对象和所有decks / tableaus / stacks只是这些静态对象的引用数组。
希望这可以帮助你理解这些概念,祝你好运!