Освободить всю текстуру памяти - PullRequest
1 голос
/ 26 марта 2012

Я загружаю своего анимированного персонажа огромной текстурой таким образом:

[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"MyFile.plist"];

И позже, когда я больше не использую персонажа, я освобождаю память, используя:

[[CCSpriteFrameCache sharedSpriteFrameCache]removeSpriteFramesFromFile:@"MyFile.plist"];

А также:

[[CCTextureCache sharedTextureCache]removeTextureForKey:@"MyFile.png"];

Просто чтобы быть уверенным.

Я делаю это, потому что используемая текстура потребляет много памяти, поэтому я стараюсь избавиться от нее, чтобы мое приложение не 'т Является ли приведенный выше код правильным?

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

Мне нужно создать и удалить текстуру персонажа.Я не могу позволить себе предварительно загрузить его в игру.

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Я обычно использую метод грубой силы следующим образом:

    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
    [[CCTextureCache sharedTextureCache] removeUnusedTextures];

в определенные моменты в игровом процессе. Это не слишком дорого, чтобы кокос сканировал свои массивы, по большому счету. Как и в вашем случае, в моей текущей игре я должен загрузить и угробить. CCTextureCache имеет CCLOG', который позволяет вам наблюдать, происходит ли удаление в действительности, когда вы этого ожидаете, или близко к нему (у autorelease есть свои особенности). Если нет, то вы, вероятно, где-то сохраняете некоторый дескриптор текстуры, спрайта, пакетного узла, CCAnimation или действия.

0 голосов
/ 26 марта 2012

Вы также пробовали purgeSharedTextureCache как отмечено здесь:

http://www.cocos2d -iphone.org / апи-исх / 0.99.0 / interface_c_c_texture_cache.html # ac673f75cd5418bdcecf1fb8717a40345

Вы можете увидеть это в работе также в ваших методах App Delegate, которые освобождают текстуры во время предупреждений памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...