Cocos2d X。自发卸载资源

时间:2013-01-30 11:41:55

标签: memory resources textures cocos2d-x preload

在加载场景中我预加载所有资源,如精灵,声音等。但我的一个测试设备(HTC Desire,Android 2.2.2)在加载后卸载资源,所以当游戏尝试播放一些声音或绘制精灵时,它冻结片刻再次加载资源。 此问题仅出现在HTC Desire上,我在其他设备上没有遇到此问题(三星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调试信息(7579):cocos2d:CCTextureCache dumpDebugInfo:53个纹理,用于103840 KB(101.41 MB)

我还尝试将预加载的纹理数量减少到31(42.76 MB),但没有任何改变。

P.S。:我再说一遍,这个问题只出现在Desire with 2.2 Android OS上......

1 个答案:

答案 0 :(得分:0)

此行为的一个可能解释是described here,在“避免在内存警告期间清除缓存”。

默认情况下,cocos2d(我认为cocos2d-x没有区别)将在收到内存警告时清除所有缓存。这意味着您可以根据需要预加载资源,只需要一个内存警告,并且将卸载所有预加载(和当前未使用的)纹理。