生活随笔
收集整理的这篇文章主要介绍了
Cocos2d-x 截屏功能集成
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1.集成到Director
这里选择把截屏功能继承到Director中,让全局的导演来执行截屏功能是一个很好的主意。
void Director::saveScreenshot(
const std::
string& fileName,
const std::function<
void(
const std::
string&)>&
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; } } else { CCLOG("cocos2d: the image can only be saved as JPG or PNG format"); return ; } //获取屏幕尺寸,初始化一个空的渲染纹理对象 auto renderTexture =
RenderTexture::create(getWinSize().width, getWinSize().height, Texture2D::PixelFormat::RGBA8888); //清空并开始获取 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); }; auto _schedule = getRunningScene()->
getScheduler(); _schedule->schedule(scheduleCallback,
this,
0.0f,
0,
0.0f,
false,
"screenshot");
} 2.如何使用saveScreenshot
截屏功能使用起来也很简单,直接调用saveSecreenshot,其中第一个参数为文件名(支持png和jpg格式,不带后缀名默认为png格式),第二个参数为回调函数,你可以在回调函数中处理这个文件。
void ScreenshotTest::saveImage(Ref *
pSender){ static int counter =
0; char png[
20]; sprintf(png, "image-%d.png", counter); char jpg[
20]; sprintf(jpg, "image-%d.jpg", counter); //截屏后的回调函数,这里显示在左下角 auto callback = [&](
const std::
string&
fullPath){ auto sprite =
Sprite::create(fullPath); CCASSERT(sprite!=nullptr,
"Failed to create sprite."); addChild(sprite); sprite->setScale(
0.3f); sprite->setPosition(Point(
40,
40)); sprite->setRotation(counter *
3); CCLOG("Image saved %s", fullPath.c_str()); }; //调用Director的截屏功能 Director::getInstance()->
saveScreenshot(png, callback); counter++
;
}
转载于:https://www.cnblogs.com/guangyun/p/7040372.html
总结
以上是生活随笔为你收集整理的Cocos2d-x 截屏功能集成的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。