Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory Cocos2d X.资源的自发卸载_Memory_Resources_Textures_Cocos2d X_Preload - Fatal编程技术网

Memory Cocos2d X.资源的自发卸载

Memory Cocos2d X.资源的自发卸载,memory,resources,textures,cocos2d-x,preload,Memory,Resources,Textures,Cocos2d X,Preload,在加载场景中,我预加载了所有资源,如精灵、声音等。但我的一个测试设备(HTC Desire、Android 2.2.2)在加载后卸载了资源,因此当游戏尝试播放一些声音或绘制精灵时,它会冻结片刻,再次加载资源。 这个问题只出现在HTC Desire上,我在其他设备上没有遇到这个问题(三星Galaxy Ace、安卓2.3.6和宏碁A100 tab、安卓4.0.3) 有人能告诉我为什么会这样吗?谢谢 这是我预加载资源的方式: for (.....) { CCString* fi

在加载场景中,我预加载了所有资源,如精灵、声音等。但我的一个测试设备(HTC Desire、Android 2.2.2)在加载后卸载了资源,因此当游戏尝试播放一些声音或绘制精灵时,它会冻结片刻,再次加载资源。 这个问题只出现在HTC Desire上,我在其他设备上没有遇到这个问题(三星Galaxy Ace、安卓2.3.6和宏碁A100 tab、安卓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.76MB),但没有任何改变


注意:我重复一遍,这个问题只出现在2.2安卓操作系统的愿望上…

关于这个行为的一个可能解释是,在“内存警告期间避免清除缓存”下

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