在android平台,程序切后台后,纹理会被清除,再切回前台时需要重新生成纹理,如果纹理较多的话会导致短暂黑屏,这里提供两种解决方法:
第一种:
CCTextureCache.cpp文件中,VolatileTexture::addDataTexture方法。
void VolatileTexture::addDataTexture(CCTexture2D *tt, void* data, CCTexture2DPixelFormat pixelFormat, const CCSize& contentSize)
{
if (isReloading)
{
return;
}
VolatileTexture *vt = findVolotileTexture(tt);
vt->m_eCashedImageType = kImageData;
vt->m_pTextureData = data;
vt->m_PixelFormat = pixelFormat;
vt->m_TextureSize = contentSize;
}
这个直接保存的纹理data,再次重新生成该纹理时,会调用
void VolatileTexture::reloadAllTextures()
{
。。。。。
case kImageData:
{
vt->texture->initWithData(vt->m_pTextureData,
vt->m_PixelFormat,
vt->m_TextureSize.width,
vt->m_TextureSize.height,
vt->m_TextureSize);
}
break;
。。。。。
}
可以节省很多时间,纹理生成速度会很快,至于为什么。。。。。。直接是data啊,但是就因为是data,被保存了,消耗内存加倍,如果纹理过多的话可能导致内存吃不消哦。
第二种:
这个方法就是在返回前台时,加一个loading了,然后异步加载纹理(参考tests中的TextureCacheTest);
还是在void VolatileTexture::reloadAllTextures()里处理,只不过把加载纹理的过程改成异步的就可以了