работа с большими листами спрайтов на iphone

Я пытаюсь использовать анимацию листа спрайтов в своем приложении. Первый POC с маленьким листом спрайтов работал нормально, но когда я меняю лист спрайтов на больший, я получаю предупреждение «check_safe_call: не удалось восстановить текущий кадр», и приложение закрывается.

Быстрый поиск показал, что эта проблема означает, что мое приложение занимает слишком много памяти или размер изображения слишком велик.

Мое изображение весит 4,9 Мб и имеет размеры 6720 * 10080 (упс!!). я читал, что iphone позволяет максимальное изображение размером 3 МБ с размерами до 1024 * 1024. Кроме того, размеры изображения листа спрайтов должны быть степенью двойки.

Поэтому, пожалуйста, дайте мне знать, как я могу использовать такой большой лист спрайтов.

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

Пожалуйста, предложите, если вы знаете какой-либо другой/лучший подход для размещения больших листов спрайтов и является ли проблема с моим листом спрайтов размером (4,9 МБ) ИЛИ размерами (6720 * 10080).

(Просто к вашему сведению, я не пытаюсь воспроизвести фильм, поэтому использование файла MP4 вместо этого для меня не вариант. Мне нужно анимировать лист спрайтов на основе ввода акселерометра, и я смог добиться этого в своем POC с листом спрайтов меньшего размера. .)

Спасибо, Свапнил


person Swapnil Luktuke    schedule 01.06.2010    source источник


Ответы (2)


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

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

person Mike Weller    schedule 01.06.2010

определенно держите его в пределах степеней 2. также держите спрайты в таблице спрайтов в контейнерах, которые являются степенями 2 (скажем, у вас есть спрайт 17x31... поместите его в контейнер 32x32). проблема с вашим листом спрайтов заключается как в 4,9 МБ, так и в размерах. Я бы подумал об использовании Adobe Fireworks или pngcrusher, чтобы значительно уменьшить размер вашего листа спрайтов.

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

person Chunjai    schedule 16.06.2010