Cocos2d X. Самопроизвольная выгрузка ресурсов

При загрузке сцены я предварительно загружаю все ресурсы, такие как спрайты, звуки и т. д. Но одно из моих тестовых устройств (HTC Desire, Android 2.2.2) выгружает ресурсы после загрузки, поэтому, когда игра пытается воспроизвести какой-либо звук или нарисовать спрайт, она зависает на момент, чтобы снова загрузить ресурс. Эта проблема возникает только на HTC Desire, на других моих устройствах (Samsung Galaxy Ace, вкладка Android 2.3.6 и Acer A100, Android 4.0.3) такой проблемы не было.

Может кто-нибудь сказать мне, почему это происходит? Спасибо.

Вот как я предварительно загружаю ресурсы:

for (.....)
{
            CCString* file = CCString::create(path.c_str());
            if(file) {
                CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(file->getCString());
            }
}

Я также пробовал так, но это дает результат сохранения:

for (.....)
{
            CCString* file = CCString::create(path.c_str());
            if(file) {
                CCSpriteFrame* frame = new CCSpriteFrame();
                CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFrame(frame, file->getCString());
                frame->retain();
            }
}

В обоих случаях CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo() сообщает, что все текстуры загружены:

01-29 15:18:36.111: D/cocos2d-x debug info(7579): cocos2d: CCTextureCache dumpDebugInfo: 53 текстуры, для 103840 КБ (101,41 МБ)

Я также пытался уменьшить количество предзагруженных текстур до 31 (42,76 МБ), но ничего не изменилось.

P.S.: Повторяю, эта проблема проявляется только на Desire с ОС Android 2.2...


person user2025142    schedule 30.01.2013    source источник


Ответы (1)


Одним из возможных объяснений такого поведения является описанный здесь, в разделе «Избегайте очистки кеша во время предупреждений о памяти».

По умолчанию cocos2d (и я полагаю, что cocos2d-x ничем не отличается) очищает все кеши при получении предупреждения о памяти. Это означает, что вы можете предварительно загружать активы столько, сколько хотите, нужно только одно предупреждение о памяти, и все предварительно загруженные (и в настоящее время неиспользуемые) текстуры будут выгружены.

person LearnCocos2D    schedule 30.01.2013