XML - хороший выбор, если вы не ограничены по размеру и поддерживаются изначально (например, в .NET и Flash), но если вы хотите тонкий формат, вы можете легко создать свой собственный формат и анализатор. Я обычно использую 1 символ, например. запятая для разделения каждого объекта. Для декодирования строки сделайте разделение на запятую. Теперь каждому объекту нужны разные свойства, поэтому разделяйте их с другим символом, например, точкой с запятой, и используйте другой символ, чтобы отделить имена свойств от значений свойств, например. Двоеточие. Таким образом, все можно легко декодировать без регулярных выражений, просто используя string.split. Вот пример:
id:1;x:5;y:45.2;angle:45,id:28;x:56;y:89;angle:12;health:78
Вы можете сэкономить еще больше места, сохранив имена свойств до 1 символа, например, h для здоровья. Например.
i:1;x:5;y:45.2;a:45,i:28;x:56;y:89;a:12;h:78
Сравните с альтернативой JSON:
{"o":[{"i":1, "x":5, "y":45.2, "a":45}, {"i":28, "x":56, "y":89, "a":12, "h":78}]}
Кроме того, если вы хотите уменьшить размер своих чисел, вы можете кодировать их, используя полный набор печатных символов UTF16. Эта тема вдохновила меня задать вопрос о переполнении стека о том, сколько данных вы можете упаковать в одного экранного персонажа . Кажется, что ответ где-то более 40 000 значений для целого числа, если вы не возражаете против использования брайля, кандзи и шахматных фигур: ♔♕♖♗♘♙♚♛♜♝♞♟
Чтобы получить дальнейшее уменьшение размера, вы можете использовать порядок чтения / записи, чтобы определить, какое значение является каким, поэтому первые два символа представляют идентификатор, следующие два - это позиция x, следующие два - y, затем угол, затем здоровье и т. д. Итак:
F5DGP@%&002DFTK#OP1F
мог хранить всю ту же информацию, что и другие примеры.
Сетка плиток может быть сохранена как просто строка с каждым символом, представляющим другой тип плитки, например:
i789pog5h3kl
где я мог бы означать лаву, 9 означает траву и т. д.