Как увеличивается использование памяти при загрузке текстур в Cocos2d (с использованием листов спрайтов)? - PullRequest
2 голосов
/ 02 августа 2011

Я создаю приложение, которое использует Cocos2d для создания карты контента (технически большое дерево в смысле теории графов).Каждый узел представлен спрайтом со своей собственной текстурой, причем все конечные узлы имеют вторую текстуру «нажатой кнопки».Кроме того, некоторые из узлов являются PNG-анимацией.У меня есть один лист спрайтов, содержащий около 130 текстур узлов, и 3 других листа спрайтов для анимации.В целом эти 4 файла составляют всего около 18,4 МБ.

Если я запускаю приложение и НЕ запускаю часть cocos2d (т.е. никогда не запускаю фреймворк и, следовательно, никогда не загружаю текстуры), приложениеработает около 10 МБ.Когда я загружаю Cocos2d и эти спрайт-листы, память загружается за пределы 90 МБ.

Все мои исследования, похоже, говорят, что я делаю что-то наиболее эффективным способом, но с использованием памяти уже настолько высоким, ямного сбоев, связанных с памятью на iPad 1.

Это нормально для cocos2d?Поскольку сами изображения не такие большие, использует ли он столько памяти из-за количества спрайтов?Есть ли способы уменьшить объем памяти?Я в недоумении и очень под ружьем ...

1 Ответ

3 голосов
/ 04 августа 2011

Оказывается, эффективность, которую вы получаете, упаковывая спрайты в большие листы спрайтов, измеряется по времени рендеринга, а не по сохраненной памяти.Неважно, в UIImage или в платформе OpenGL, такой как Cocos2d, при загрузке изображения объем памяти, который он занимает, составляет ширину x высоту x байтов на пиксель.Таким образом, изображение размером 2048x2048 png занимает 2048x2048x4 байта в памяти (12 МБ).

Чтобы уменьшить объем памяти в этом случае, мне просто нужно загрузить вещи по мере необходимости и выгрузить их, как только они не нужны.Теперь хитрость заключается в том, чтобы выяснить, где и когда загружаться, поэтому пользователь никогда не видит заикание.FUN!

...