用cocos2d-x 2.2.0 开发的一个游戏,每个关卡需要加载100张左右的图片。目前加载的图片内存释放有问题,请教。
加载图片是这么实现的。
cocos2d::CCSprite* ImgStage0;
cocos2d::CCSprite* ImgStage1;
cocos2d::CCSprite* ImgStage2;
cocos2d::CCSprite* ImgStage3;
…(省略剩余的)
cocos2d::CCTexture2D* ImgStage0T2D;
cocos2d::CCTexture2D* ImgStage1T2D;
cocos2d::CCTexture2D* ImgStage2T2D;
cocos2d::CCTexture2D* ImgStage3T2D;
…(省略剩余的)
ImgStage0T2D = loadImageTexture2D("a0@2x.png"); ImgStage0 = loadImageSprite(ImgStage0T2D); ImgStage0->retain();
ImgStage1T2D = loadImageTexture2D("a1@2x.png"); ImgStage1 = loadImageSprite(ImgStage1T2D); ImgStage1->retain();
ImgStage2T2D = loadImageTexture2D("a2@2x.png"); ImgStage2 = loadImageSprite(ImgStage2T2D); ImgStage2->retain();
ImgStage3T2D = loadImageTexture2D("a3@2x.jpg"); ImgStage3 = ImgStage3(ImgStage3T2D); ImgStage3->retain();
…(省略剩余的)
释放CCSprite部分
直接用的release函数
ImgStage0->release();
ImgStage1->release();
ImgStage2->release();
ImgStage3->release();
…(省略剩余的)
释放CCTexture2D方面
removeTexture2D(ImgStage0);
removeTexture2D(ImgStage1);
removeTexture2D(ImgStage2);
removeTexture2D(ImgStage3);
…(省略剩余的)
具体封装函数如下:
/-----------------------------------------------------------------------------
*
*
-----------------------------------------------------------------------------/
cocos2d::CCTexture2D* TTBase::loadImageTexture2D(const char* imgString)
{
return CCTextureCache::sharedTextureCache()->addImage(imgString);
}
/-----------------------------------------------------------------------------
*
*
-----------------------------------------------------------------------------/
cocos2d::CCSprite* TTBase::loadImageSprite(cocos2d::CCTexture2D* imgTexture2D)
{
return CCSprite::createWithTexture(imgTexture2D);
}
/-----------------------------------------------------------------------------
*
*
-----------------------------------------------------------------------------/
void TTBase::removeTexture2D(cocos2d::CCTexture2D* imgTexture2D)
{
CCTextureCache::sharedTextureCache()->removeTexture(imgTexture2D);
imgTexture2D=NULL;
}
感觉用CCTextureCache::sharedTextureCache()->removeTexture(imgTexture2D);和ImgStage0->release(); 后释放不掉图片占用的内存。加载3关后,会内存溢出崩溃,我想问问哪里出了问题。