2012-01-05 3 views
0

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

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

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

ответ

1

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

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

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

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

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

1

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

removeChild(sprite1, true); 

или

sprite1.cleanup() 

после этого вы можете присвоить NULL к этому объекту.

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

CCDirector.sharedDirector().purgeCachedData(); 

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

Смежные вопросы