-
1、Cocos2d-x3.1
在Cocos2d-x3.2之前,Cocos引擎没有提供截图功能,但是可以通过RenderTexture实现, - 原文链接:http://www.it165.net/pro/html/201409/21451.html
1.1首先在CCDirector.h中添加如下代码:并在其中添加头文件 #include "2d/CCRenderTexture.h"
1.voidsaveScreenshot(conststd::string& fileName,conststd::function<void(conststd::string&)>& callback);1.2然后在CCDirector.cpp中添加如下代码:
01.voidDirector::saveScreenshot(conststd::string &fileName,conststd::function<void(conststd::string &)> &callback)02.{03.Image::Format format;04.//进行后缀判断05.if(std::string::npos != fileName.find_last_of(".")){06.auto extension = fileName.substr(fileName.find_last_of("."),fileName.length());07.if(!extension.compare(".png")) {08.format = Image::Format::PNG;09.}elseif(!extension.compare(".jpg")) {10.format = Image::Format::JPG;11.}else{12.log("cocos2d: the image can only be saved as JPG or PNG format");13.return;14.}15.}else{16.log("cocos2d: the image can only be saved as JPG or PNG format");17.return;18.}19.//获取屏幕尺寸,初始化一个空的渲染纹理对象20.auto renderTexture = RenderTexture::create(getWinSize().width, getWinSize().height, Texture2D::PixelFormat::RGBA8888);21.//清空并开始获取22.renderTexture->beginWithClear(0.0f,0.0f,0.0f,0.0f);23.//遍历场景节点对象,填充纹理到RenderTexture中24.getRunningScene()->visit();25.//结束获取26.renderTexture->end();27.//保存文件28.renderTexture->saveToFile(fileName , format);29.//使用schedule在下一帧中调用callback函数30.auto fullPath = FileUtils::getInstance()->getWritablePath() + fileName;31.auto scheduleCallback = [&,fullPath,callback](floatdt){32.callback(fullPath);33.};34.auto _schedule = getRunningScene()->getScheduler();35._schedule->schedule(scheduleCallback,this,0.0f,0,0.0f,false,"screenshot");36.37.}1.3在HelloWorld.cpp中添加如下代码:
01.bool HelloWorld::init()02.{03.bool bRet =false;04.do{05.CC_BREAK_IF(!Layout::init());06.auto button = ui::Button::create("CloseNormal.png","CloseSelected.png");07.button->setPosition(Vec2(200,200));08.addChild(button);09.button->addTouchEventListener(CC_CALLBACK_2(HomeLayer::touchEvent,this));10.Director::getInstance()->getEventDispatcher();11.12.bRet =true;13.}while(0);14.returnbRet;15.}16.17.voidHelloWorld::touchEvent(cocos2d::Ref *pSender, cocos2d::ui::Widget::TouchEventType type)18.{19.switch(type)20.{21.caseWidget::TouchEventType::ENDED:22.<span style="white-space:pre"> </span>//参数依次为保存图片的名字,在控制台打印保存路径信息23.Director::getInstance()->saveScreenshot("homeLayer.png", [&](conststd::string &str){24.log("str = %s",str.c_str());25.});26.break;27.default:28.break;29.}30.}1.4点击按钮,实现截图功能,最后图片保存在沙盒中,可在Xcode控制台下看到文件保存路径。
2、Cocos2d-x3.2
Cocos2d-x3.2中已经封装了截图共,使用如下1.voidUtil::captureScreen(conststd::function<void(bool,conststd::string&)>& afterCaptured,conststd::string& filename); -
Cocos2d-x3.1及3.2实现截屏功能
最新推荐文章于 2024-11-21 10:23:23 发布
本文详细介绍了在Cocos2d-x3.1及3.2版本中如何实现截图功能,包括在Cocos引擎前版本通过RenderTexture实现的方法,以及在3.2版本中利用内置功能简化操作的过程。文章提供了关键代码示例,并展示了在HelloWorld层中触发截图并保存至沙盒的操作。
592

被折叠的 条评论
为什么被折叠?



