Управление памятью в игре - PullRequest
0 голосов
/ 05 января 2012

Моя игра потребляет много памяти в моем телефоне, как я могу решить эту проблему?

Я пытался оставить свой objects = null в финале и вызвать сборщик мусора, но не решен.

Игра должна создавать новый спрайт каждую минуту.

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Что потребляет большую часть памяти в Sprite, так это ее текстура, а не сам объект, и, как я вижу в исходном тексте cocos2d для Android, они кэшируются (поскольку IO работает медленно) с помощью TextureManager путем сопоставления имен файлов. Поэтому не забывайте освобождать текстуры (в основном крупные) с помощью TextureManager.removeTexture () , если они вам не понадобятся в течение более длительного времени (или повторная загрузка не повредит).

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

Если вы не знали, Android SDK поставляется с инструментом под названием трекер выделения (который теперь также интегрирован в ADT) для анализа использования памяти. Возможно, проблема не в том, где вы этого ожидаете.

1 голос
/ 12 декабря 2012

Вы должны очистить ранее созданный спрайт или объект cocos2d.

removeChild(sprite1, true);

или

 sprite1.cleanup()

после этого вы можете присвоить этому объекту значение null.

Вы можете вызвать метод

CCDirector.sharedDirector().purgeCachedData();

Удаляет кэшированные все кэшированные данные cocos2d.

1 голос
/ 03 августа 2012

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

spritetest.setTexture(CCTextureCache.sharedTextureCache().addImage("newimage.png"));
...