关闭

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

标签: 拆分Cocos2D-Xplist中的所有
1872人阅读 评论(0) 收藏 举报
分类:
//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;
	}
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40206次
    • 积分:571
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论