Вы загружаете файл с удаленного сервера? Если так, вот почему это так долго. Вместо этого вы должны встроить файл в игру. Я говорю это потому, что вы, вероятно, занимает 2-3 байта на плитку, поэтому размер файла около 30 КБ и 200 мс звучит как разумное время загрузки для файла такого размера (включая накладные расходы и т. Д., И в зависимости от вашего интернет-соединения).
Относительно того, как уменьшить размер файла - я могу придумать два простых метода, которые немного уменьшат размер файла:
1) Если у вас есть в основном пустые квадраты и только несколько значимых, ваша карта часто называется «скудной». При хранении разреженного массива данных вы можете использовать простую технику сжатия (формально известную как «кодирование по длине прогона»), при которой каждый раз, когда вы сталкиваетесь с пустыми квадратами, вы указываете, сколько их будет. Так например вместо {0,0,0,0,0,0,0,0,0,0,1,1,2,3,0,0,0,0,0,0,0,0, 0,0,0,0,1} вы можете хранить {10 0, 1, 1, 2, 3, 12 0, 1}
2) Для экономии места я рекомендую хранить все как двоичные данные. Точная настройка файла в основном зависит от того, сколько возможных типов листов существует, но это лучшее решение, чем хранение символов ascii, соответствующих представлению чисел в base-10, разделенных разделителями.
Пример двоичного формата
Файл организован в сегменты длиной 3 или 4 байта, как описано ниже.
Первый сегмент указывает версию игры, для которой была создана карта. Длина 3 байта.
Сегменты 2, 3 и 4 указывают размеры карты (x, y, z). 3 байта каждый.
Все остальные сегменты указывают либо номер фрагмента, и его длина составляет 3 байта, а MSB равен 0. Исключением является следующее.
Если один из сегментов элемента мозаичного изображения является пустым элементом мозаичного изображения, он имеет длину 4 байта с MSB, равным 1, и указывает число пустых элементов мозаичного изображения, включая этот последующий элемент мозаичного изображения.
Причина, по которой я предлагаю флаг MSB, заключается в том, что вы можете различать сегменты, которые предназначены для плиток, и сегменты, которые указывают количество пустых плиток, следующих за этим сегментом. Для этих сегментов я увеличиваю длину до 4 байтов (вы можете сделать это 5), чтобы вы могли хранить большее количество пустых плиток на сегмент.