0

在加载场景时,我预加载了所有资源,如精灵、声音等。但是我的一个测试设备(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 调试信息(7579): cocos2d: CCTextureCache dumpDebugInfo: 53 个纹理,为 103840 KB (101.41 MB)

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

PS:我再说一遍,这个问题只出现在 2.2 Android OS 的 Desire 上......

4

1 回答 1

0

此处描述了此行为的一种可能解释,在“避免在内存警告期间清除缓存”下。

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

于 2013-01-30T15:59:05.217 回答