cocos2d-x android平台切后台返回后的纹理加载问题

来源:互联网 发布:淘宝客服智联招聘 编辑:程序博客网 时间:2024/04/28 11:19

在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()里处理,只不过把加载纹理的过程改成异步的就可以了

原创粉丝点击