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

//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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值