Размер изображения в cocos2d

Я играю с анимацией из примерно 90 изображений при разрешении 480x320 каждое, и мне интересно, чтобы изображения не были степенью 2, это будет большим хитом производительности? Я программирую так же далеко, как iphone 3Gs. Также я использую cocs2d.

2 ответа

Решение

Посмотрим...

Изображение 480x320 создаст текстуру 512x512 (следующая ближайшая степень двойки). 512x512 x 32-битная глубина цвета (4 байта) равна 1 мегабайту. 90 раз 1 мегабайт равен 90 мегабайт.

Ваша самая большая проблема будет выделять столько памяти и кэшировать ее. Без кэширования анимационных изображений вам придется загружать каждое изображение каждый раз, когда меняется кадр анимации. Загрузка 1 мегабайта из флэш-памяти чертовски медленная, я предполагаю, что> 100 миллисекунд. Поэтому каждый раз, когда изменяется кадр, ваше приложение останавливается на долю секунды. Это будет проблемой на 3GS и, возможно, на устройствах Retina, если вы используете изображения Retina (для каждого изображения 960x640 требуется 4 Мегабайта текстурной памяти).

Вы можете улучшить это, используя сжатые изображения PVR (используйте TexturePacker). Даже половинного размера текстуры до 16 бит, вероятно, будет недостаточно для плавной анимации.

Предполагая, что вы загружаете все эти изображения в начале, и они являются 16-битными изображениями.

Ну, у вас будет 512x512x90 = 23 592 960 пикселей с 16-битными изображениями, что составляет 377 487 360 бит. 377 487 360 бит = 45 мегабайт оперативной памяти.

Так что да, это большой успех производительности.

Другие вопросы по тегам