//1.在Init里调用定时器(因为cocos autorelease 不是马上释放内存,如果一次性图片太多会导致程序内存不够用)
this->schedule(schedule_selector(HelloWorld::update),0.5f);
//2.定时调用分解
void HelloWorld::update(float delta)
{
decodePlist();
}
//3.保存文件函数
void saveFile(CCSpriteFrame* pSpriteFrame,const char* name)
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCRenderTexture* pScreen = CCRenderTexture::create(size.width,size.height, kCCTexture2DPixelFormat_RGBA8888);
/*
CCRenderTexture::saveToFile下的
bRet = pImage->saveToFile(fullpath.c_str(), true); 修改为false
*/
//渲染纹理开始捕捉
pScreen->begin();
CCSprite* pSprite = CCSprite::createWithSpriteFrame(pSpriteFrame);
pSprite->setPosition(ccp(size.width/2 + pSpriteFrame->getOffset().x,size.height/2+ pSpriteFrame->getOffset().y));
//当前场景参与绘制
pSprite->visit();
//结束捕捉
pScreen->end();
//保存为png
pScreen->saveToFile(name, kCCImageFormatPNG);
CC_SAFE_RELEASE_NULL(pScreen);
CC_SAFE_RELEASE_NULL(pSprite);
}
//4.解析plist
void HelloWorld::decodePlist()
{
CCSpriteFrameCache* pSpriteFrameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
std::string strPngName = "imgAll.png";
std::string strPlistName = "imgAll.plist";
pSpriteFrameCache->addSpriteFramesWithFile(strPlistName.c_str(),strPngName.c_str());
//需要先把pSpriteFrames 改成public,否则无法访问
CCDictionary* pDic = pSpriteFrameCache->m_pSpriteFrames;
CCDictElement* element;
CCDICT_FOREACH(pDic, element)
{
CCSpriteFrame* pFrame = (CCSpriteFrame*)element->getObject();
const char* pFileName = element->getStrKey();
saveFile(pFrame,pFileName);
//解析一个之后删除,并返回,为了下次释放内存
pDic->removeObjectForKey(pFileName);
return;
}
}
拆分Cocos2D-Xplist中的所有图片另存为单张png
最新推荐文章于 2020-08-04 20:48:00 发布