最近做一个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); sprite->visit(); render->end(); //文件被保存在类似于C:\Users\Administrator\AppData\Local\ProjectName的路径中 render->saveToFile(filename,Image::Format::PNG); } //从缓存移除plist文件 SpriteFrameCache::getInstance()->removeSpriteFramesFromFile("fish.plist"); }