拆分Cocos2D-Xplist中的所有图片另存为单张png

来源:互联网 发布:百度云for mac os x 编辑:程序博客网 时间:2024/05/20 15:38
//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();  //保存为pngpScreen->saveToFile(name, kCCImageFormatPNG);CC_SAFE_RELEASE_NULL(pScreen);CC_SAFE_RELEASE_NULL(pSprite);}//4.解析plistvoid 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;}}
原创粉丝点击