работа с большими спрайт-листами на iphone - PullRequest
1 голос
/ 01 июня 2010

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

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

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

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

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

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

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

Спасибо, Swapnil

Ответы [ 2 ]

1 голос
/ 16 июня 2010

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

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

1 голос
/ 01 июня 2010

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

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

...