Я разрабатывал такую игру, как Age of empire (здания на карте), и для каждого здания у меня есть спрайт-лист для его анимации. Я использую покадровую анимацию для анимации здания (в любом случае не знаю ни о каком другом методе). Я заметил, что моя папка ресурсов становится очень большой из-за изображений, которые я в нее помещаю.
Как такие игры, как CoC и Age of Empires, сохраняют свой размер apk до 50 Мг? Я что-то здесь упускаю, когда дело доходит до разработки игр
Спасибо
РЕДАКТИРОВАТЬ: больше информации о проблеме, с которой я сталкиваюсь
У меня есть много анимационных объектов. Я выбрал этот путь, потому что он был самым быстрым и приносил желаемые результаты. По сути, каждое здание представляет собой анимационный чертеж, в котором его XML-файл ссылается на 8 элементов рисования (8 изображений = 8 файлов). Все они PNG из-за прозрачности. Поскольку у меня более 200 изображений, размер apk составляет 120 МБ (и я еще не закончил копирование половины файлов). Вот что подсказывает, должен быть способ решить это. Пожалуйста, помогите коллеге-разработчику
Ответы:
По вашему вопросу неясно, действительно ли вы хотите знать методы, позволяющие играм экономить дисковое пространство даже при наличии большого количества тяжелых файлов изображений / ресурсов (это и есть в основном вопросе), или если вы просто хотите знать, Есть меньше способов для анимации ваших зданий, требующих дискового пространства (это то, что подразумевается под заголовком вашего вопроса).
Итак, я поставлю этот ответ здесь, пытаясь помочь сэкономить место, когда у вас много изображений. Если вас интересуют только методы анимации, которые могут позволить вам сэкономить место на диске, пожалуйста, дайте мне знать, тогда я могу удалить ответ.
Тем не менее, в аналогичной ситуации два решения, которые я видел (и использовал один раз) с точки зрения экономии места на диске, были:
1) объединить отдельные изображения в одно и то же изображение. Иногда это может помочь. Поэтому вместо того, чтобы сохранять 4 отдельных файла для каждого из следующих цветных квадратов, я сохраняю их все вместе в одном и том же изображении (и разделю их только по коду игры):
В этом примере сохранение каждого в 4 различных файлах PNG составляет 1255 байт, в то время как один файл со всеми объединенными файлами составляет 451 байт. Конечно, насколько это может помочь, зависит от каждого конкретного случая, и вы должны проверить, может ли это помочь вам в зависимости от ваших изображений.
2) сжать папку ресурсов. Это часто может быть очень полезно для экономии места на диске. Затем, когда игра запускается, вы либо распаковываете, либо извлекаете нужное изображение из сжатого файла - в зависимости от используемого формата сжатия. Смотрите этот предыдущий ответ, который стал вики этого сайта: /gamedev//a/37649/72423
Но также имейте в виду, что каждый тип сжатия может быть более или менее выгодным в зависимости от типа файла образа, который вы используете : избегайте двойного сжатия ресурсов
Для получения более подробной информации о сжатии: современный уровень сжатия изображений?
Наконец, вам также может быть интересно подумать, какие типы изображений использовать в каждой ситуации: какой формат изображения более эффективен при использовании памяти: PNG, JPEG или GIF?
источник
Я хотел бы предложить вам попробовать TexturePacker
Используете ли вы среду разработки игр, как AndEngine, Cocos2d-x или LibGdx? => Нет
Нужно ли загружать все изображения одновременно? Похоже, вы столкнетесь с огромными проблемами ОЗУ на целевых устройствах.
Обновление: Снейк прислал мне несколько изображений. Как и было обещано, они не станут здесь публичными, поэтому я сам создал немного искусства, чтобы продемонстрировать, как уменьшить использование памяти.
В исходном изображении только одна часть изображения была в движении. Я положил птицу на дом, чтобы продемонстрировать это:
По сути, упаковка полной анимации в лист - это большая трата памяти. Вы должны разделить статические и движущиеся части:
Статическая:
Anim01:
Anim02:
Сохраняйте исходное положение птицы на изображениях . Вот почему так много пустого пространства выше. Это нужно для выравнивания анимации.
Теперь перетащите изображения на TexturePacker и выберите следующие параметры
В результате вы получаете 2 файла: спрайт и файл описания JSON.
Важными частями являются frame и spriteSourceSize .
Кадр дает местоположение исходного спрайта в спрайт листа.
spriteSourceSize дает вам смещение для рисования изображения - части изображения, которые не учитываются из-за обрезки:
Простая процедура рисования псевдокода выглядит следующим образом:
Возможно, вам придется настроить расчет смещения в зависимости от точки поворота / начала координат в вашей графической системе. Приведенная выше подпрограмма предполагает систему координат, источник которой находится слева вверху.
Затем просто нарисуйте дом в 2 прохода:
Вам не нужно заботиться о смещениях - поскольку изображения уже выровнены.
источник
Вот несколько указателей, которые вы можете использовать
Я надеюсь, что эти указатели помогут
PS Я даю лишь обобщенную идею, так как не знаю, какой именно у вас игровой контент и извинения, если эти указатели бесполезны.
источник
Многие игры не хранят свои графические ресурсы в .apk; они включают только «основы», такие как графика пользовательского интерфейса и код игры, и загружают оставшиеся ресурсы после установки игры. Это особенно актуально для игр, которые используют различные графические ресурсы в зависимости от разрешения вашего дисплея, чтобы не допустить наличия в .apk ресурсов как с низким, так и с высоким разрешением.
Вы должны взглянуть на оба варианта оптимизации, предоставляемые другими ответчиками, а также на то, будете ли вы в конечном счете обслуживать графику вашей игры отдельно от самого .apk.
источник
Я пришел на этот сайт в поисках аналогичного вопроса, и действительно есть несколько хороших ресурсов, указанных как в ответах на ваш вопрос, так и в других.
Возможно, вам стоит взглянуть на 2D-анимацию: анимированные 3D-модели или спрайты с кадрами анимации? для некоторых дебатов по различным типам анимации. Это помогло мне оптимизировать мою игру. Кроме того, вы не сообщаете нам, какой API вы используете или какой движок вы используете. Уже одно это может изменить ситуацию: Android покадровая анимация PNG
Кроме того, имейте в виду, что если вы пойдете по пути сжатия, могут существовать важные различия между способами сжатия. В частности, существует довольно много различий между типами сжатия, и существуют некоторые специализированные дискуссии о том, какой маршрут является наиболее подходящим для мобильных устройств. Особенно, если принять во внимание, что для мобильных устройств использование памяти и загрузка процессора также имеют первостепенное значение. См .: http://www.gamasutra.com/blogs/AlexandruVoica/20130419/190833/Why_efficiency_is_key_in_texture_compression_standards_for_mobile_graphics.php?print=1
источник