Я хотел бы предложить вам попробовать TexturePacker
- Вы можете просто перетащить все свои изображения и получить их упакованными
- Вы можете применять различное сжатие - например, использовать индексированные PNG, которые потребляют намного меньше памяти - до 70% меньше по сравнению со стандартным файлом PNG
- Вы можете создать файл с данными, которые содержат имя + положение каждого из ваших зданий
- бесплатной версии может уже хватить, чтобы создать спрайт листы для вас
Используете ли вы среду разработки игр, как AndEngine, Cocos2d-x или LibGdx? => Нет
Нужно ли загружать все изображения одновременно? Похоже, вы столкнетесь с огромными проблемами ОЗУ на целевых устройствах.
Обновление: Снейк прислал мне несколько изображений. Как и было обещано, они не станут здесь публичными, поэтому я сам создал немного искусства, чтобы продемонстрировать, как уменьшить использование памяти.
В исходном изображении только одна часть изображения была в движении. Я положил птицу на дом, чтобы продемонстрировать это:
По сути, упаковка полной анимации в лист - это большая трата памяти. Вы должны разделить статические и движущиеся части:
Статическая:
Anim01:
Anim02:
Сохраняйте исходное положение птицы на изображениях . Вот почему так много пустого пространства выше. Это нужно для выравнивания анимации.
Теперь перетащите изображения на TexturePacker и выберите следующие параметры
- Формат данных: JSON-хэш (или XML, если вы предпочитаете это)
- TrimMode: Trim (это создает прямоугольники)
- Пиксельный формат: INDEXED 8bit - для создания 8-битных PNG (примерно на 70% меньше памяти)
- Разрешить вращение: ложь
- Введите имя файла для данных
В результате вы получаете 2 файла: спрайт и файл описания JSON.
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
Важными частями являются frame и spriteSourceSize .
Кадр дает местоположение исходного спрайта в спрайт листа.
spriteSourceSize дает вам смещение для рисования изображения - части изображения, которые не учитываются из-за обрезки:
Простая процедура рисования псевдокода выглядит следующим образом:
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
Возможно, вам придется настроить расчет смещения в зависимости от точки поворота / начала координат в вашей графической системе. Приведенная выше подпрограмма предполагает систему координат, источник которой находится слева вверху.
Затем просто нарисуйте дом в 2 прохода:
draw("background", 100, 100);
draw("anim_01", 100, 100);
Вам не нужно заботиться о смещениях - поскольку изображения уже выровнены.