在Director里面增加一个函数:
bool Director::saveScreenshot(const std::string& fileName,const std::function& callback)
{
Image::Format format;
//进行后缀判断
if(std::string::npos != fileName.find_last_of(.)){
auto extension = fileName.substr(fileName.find_last_of(.),fileName.length());
if (!extension.compare(.png)) {
format = Image::Format::PNG;
} else if(!extension.compare(.jpg)) {
format = Image::Format::JPG;
} else{
CCLOG(cocos2d: the image can only be saved as JPG or PNG format);
return false;
}
} else {
CCLOG(cocos2d: the image can only be saved as JPG or PNG format);
return false ;
}
//获取屏幕尺寸,初始化一个空的渲染纹理对象
auto renderTexture = RenderTexture::create(getWinSize().width, getWinSize().height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8); //最后一个参数省略的话,对clippingnode截图是无效的
//清空并开始获取
renderTexture->beginWithClear(0.0f, 0.0f, 0.0f, 0.0f);
//遍历场景节点对象,填充纹理到RenderTexture中
getRunningScene()->visit();
//结束获取
renderTexture->end();
//保存文件
renderTexture->saveToFile(fileName , format);
//使用schedule在下一帧中调用callback函数
auto fullPath = FileUtils::getInstance()->getWritablePath() + fileName;
auto scheduleCallback = [&,fullPath,callback](float dt){
callback(fullPath);
};
return true;
}(const>
调用的话:
Director::getInstance()->saveScreenshot(sss.png, nullptr);
3.2版本:
#include base/ccUtils.h
utils::captureScreen([](){log(ok);}, dd.png);