Лучший способ хранения - PullRequest
       37

Лучший способ хранения

0 голосов
/ 06 февраля 2012

Итак, я нахожусь в процессе создания игры на основе плитки 2D-песочницы, например Terraria . Я уже знаю, как создавать огромные миры, подобные этому, но я нахожусь в тупике, как хранить мир. Я знаю, что должен хранить необработанные байты, чтобы размер файла был небольшим. Я думал о том, чтобы каждая плитка имела свой собственный байт, но я не знаю, как это сделать. Я знаю, что один символ ASCII - это один байт, так почему бы не сделать каждый тайл отдельным символом ASCII? Как трава должна быть «G», грязь - «D», а камень - «S». Тогда я мог бы сохранить каждого из персонажей в файл и назвать его день. Я не хочу знать, будет ли этот метод в порядке или есть лучший?

Затем, предполагая, что предыдущий метод в порядке, мне также нужно знать, хорошо ли сочетаются символы и байты .NET. Под этим я подразумеваю, что если я преобразую простой символ ASCII, такой как «G» для фрагмента травы, в байт, это будет один байт или больше? Возможно .NET хранит символ как нечто большее, чем байт, которого я не знаю.

Итог, как лучше всего хранить каждый тип плитки в файле? Имейте в виду, что эти миры будут гигантскими, поэтому обязательно, чтобы файл был маленьким.

Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2012

Я не могу помочь вам со спецификой .NET, но если вы используете символы и храните мир как гигантскую строку ascii, это будет зависеть от того, как она хранится на диске. Это может упростить преобразование однобайтового кода в код символа, который вы используете.

Во-вторых, вам нужно будет разделить данные на части, или вам будет сложно загрузить определенную их часть, например, пытаясь найти дорожку на старой виниловой записи.

Что касается концепции, вы должны использовать статические классы для каждого типа плитки. Таким образом, система не дублирует данные, связанные с классами, для тысяч однобайтовых объектов. Тогда значение байта является ссылкой на стек, содержащий все эти статические объекты.

Если это похоже на эзотерический секрет, это не так; это считается правильным способом в ОО-программировании реализовать колоду карт. Поскольку карты на самом деле не содержат много случайностей или уникальных свойств (они могут иметь положение или ориентацию, но могут храниться в слоте в игре, которую вы строите), все карты в любой игре могут состоять из 52 карт. статические объекты и все колоды / таблицы / стеки являются просто массивами ссылок на эти статические объекты.

Надеюсь, это поможет вам с концепциями, и удачи!

...