最近做一個Demo,需要利用序列幀圖片,想到Cocos2dx能夠解析plist文件獲取打包後圖片中的小圖片,就想如果Cocos2dx能夠提供保存精靈/紋理到文件中的方法,那麼就可以將plist文件中的小圖片提取出來。果不其然,RenderTexture類提供了saveToFile方法,用於將紋理保存到文件中,下面直接上代碼以供以後參考。
void GameScene::SaveFiles()
{
//加載plist文件到緩存
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("fish.plist");
std::stringstream ss;
std::string filename;
//遍歷序列幀圖片
for (int i=0; i<10; i++)
{
ss.clear();
ss.str("");
ss << "fish_" << (i + 1) << ".png";
filename = ss.str();
//獲取精靈
auto sprite = Sprite::createWithSpriteFrameName(filename);
sprite->setAnchorPoint(Vec2::ZERO);
float width = sprite->getContentSize().width;
float height = sprite->getContentSize().height;
//創建渲染紋理
auto render = RenderTexture::create(width, height, Texture2D::PixelFormat::RGBA8888);
render->setSprite(sprite);
//填充紋理
render->beginWithClear(0, 0, 0, 0);
sprite->visit();
render->end();
//文件被保存在類似於C:\Users\Administrator\AppData\Local\ProjectName的路徑中
render->saveToFile(filename, Image::Format::PNG);
}
//從緩存移除plist文件
SpriteFrameCache::getInstance()->removeSpriteFramesFromFile("fish.plist");
}