Кокос2д. Загружать и хранить изображения правильно?

На этот вопрос есть много ответов. Но все они неверны!

Например, если я создал объект CCLayer с одним объектом CCSprite. У меня есть 3 текстуры, и я хочу переключаться между ними при каждом касании.

Например, я буду использовать что-то похожее на это:

ссылка

Я запускаю это приложение в симуляторе. Затем я вызываю предупреждение о памяти. Затем я пытаюсь переключаться между изображениями (текстурами). И я вижу, что 2 из 3 изображений удалены (за исключением того, что изображение было показано в то же время, когда появилось предупреждение о памяти).

Я пытался использовать команды сохранения/освобождения для CCSprite и ССTexture2D, но они приводят к ситуации, когда метод deleteloc освобождаемого объекта никогда не вызывается.

Так как же их правильно хранить? Я хочу сохранить их при предупреждении о памяти и освободить/удалить их, когда текущий слой будет уничтожен.


person Gargo    schedule 19.12.2012    source источник


Ответы (3)


Храните их в одном текстурном атласе, созданном с помощью Texture Packer. Тогда это так же просто, как вызов [Sprite setDisplayFrame:frameName] для переключения отображаемой текстуры.

person Sylvan    schedule 22.12.2012

По умолчанию при предупреждении памяти cocos2d удалит неиспользуемые текстуры. Весь смысл предупреждения о памяти заключается в том, что ОС говорит вашему приложению: «Эй, это не нормально, уменьшите свой аппетит к памяти, или я вас выключу», и ваше приложение должно быть похоже на «ой, извините, освобождаю память сейчас».

person Kreiri    schedule 19.12.2012
comment
Они не используются! И я хочу выбрать, какие текстуры удалить. Не все они. Удаляет ли iOS все графические объекты, находящиеся за пределами видимого прямоугольника? Никогда. Это позволяет что-то написать в didReceiveMeroryWarning. - person Gargo; 23.04.2013