Cocos2d-x3.1及3.2实现截屏功能

前端之家收集整理的这篇文章主要介绍了Cocos2d-x3.1及3.2实现截屏功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  • 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.@H_403_17@ void@H_403_17@saveScreenshot(@H_403_17@const@H_403_17@std::string& fileName,@H_403_17@std::function<@H_403_17@(@H_403_17@std::string&)>& callback);@H_403_17@

    1.2然后在CCDirector.cpp中添加如下代码

    01.@H_403_17@ Director::saveScreenshot(@H_403_17@std::string &fileName,宋体; background:none">std::string &)> &callback)@H_403_17@
    02.@H_403_17@ {@H_403_17@
    03.@H_403_17@ Image::Format format;@H_403_17@
    04.@H_403_17@ //进行后缀判断@H_403_17@
    05.@H_403_17@ if@H_403_17@(std::string::npos != fileName.find_last_of(@H_403_17@"."@H_403_17@)){@H_403_17@
    06.@H_403_17@ auto extension = fileName.substr(fileName.find_last_of(@H_403_17@),fileName.length());@H_403_17@
    07.@H_403_17@ (!extension.compare(@H_403_17@".png"@H_403_17@)) {@H_403_17@
    08.@H_403_17@ format = Image::Format::PNG;@H_403_17@
    09.@H_403_17@ }@H_403_17@else@H_403_17@".jpg"@H_403_17@10.@H_403_17@ format = Image::Format::JPG;@H_403_17@
    11.@H_403_17@ else@H_403_17@{@H_403_17@
    12.@H_403_17@ log(@H_403_17@"cocos2d: the image can only be saved as JPG or PNG format"@H_403_17@);@H_403_17@
    13.@H_403_17@ return@H_403_17@;@H_403_17@
    14.@H_403_17@ }@H_403_17@
    15.@H_403_17@ 16.@H_403_17@ 17.@H_403_17@ 18.@H_403_17@ 19.@H_403_17@ //获取屏幕尺寸,初始化一个空的渲染纹理对象@H_403_17@
    20.@H_403_17@ auto renderTexture = RenderTexture::create(getWinSize().width,getWinSize().height,Texture2D::PixelFormat::RGBA8888);@H_403_17@
    21.@H_403_17@ //清空并开始获取@H_403_17@
    22.@H_403_17@ renderTexture->beginWithClear(@H_403_17@0@H_403_17@.0f,@H_403_17@.0f);@H_403_17@
    23.@H_403_17@ //遍历场景节点对象,填充纹理到RenderTexture中@H_403_17@
    24.@H_403_17@ getRunningScene()->visit();@H_403_17@
    25.@H_403_17@ //结束获取@H_403_17@
    26.@H_403_17@ renderTexture->end();@H_403_17@
    27.@H_403_17@ //保存文件@H_403_17@
    28.@H_403_17@ renderTexture->saveToFile(fileName,format);@H_403_17@
    29.@H_403_17@ //使用schedule在下一帧中调用callback函数@H_403_17@
    30.@H_403_17@ auto fullPath = FileUtils::getInstance()->getWritablePath() + fileName;@H_403_17@
    31.@H_403_17@ auto scheduleCallback = [&,fullPath,callback](@H_403_17@float@H_403_17@dt){@H_403_17@
    32.@H_403_17@ callback(fullPath);@H_403_17@
    33.@H_403_17@ };@H_403_17@
    34.@H_403_17@ auto _schedule = getRunningScene()->getScheduler();@H_403_17@
    35.@H_403_17@ _schedule->schedule(scheduleCallback,宋体; background:none">this@H_403_17@,宋体; background:none">false@H_403_17@403_17@"screenshot"@H_403_17@);@H_403_17@
    36.@H_403_17@
    37.@H_403_17@ }@H_403_17@

1.3在HelloWorld.cpp中添加如下代码

bool HelloWorld::init()@H_403_17@
bool bRet =@H_403_17@do@H_403_17@CC_BREAK_IF(!Layout::init());@H_403_17@
auto button = ui::Button::create(@H_403_17@"CloseNormal.png"@H_403_17@"CloseSelected.png"@H_403_17@button->setPosition(Vec2(@H_403_17@200@H_403_17@));@H_403_17@
addChild(button);@H_403_17@
button->addTouchEventListener(CC_CALLBACK_2(HomeLayer::touchEvent,宋体; background:none">Director::getInstance()->getEventDispatcher();@H_403_17@
bRet =@H_403_17@true@H_403_17@;@H_403_17@
while@H_403_17@(@H_403_17@bRet;@H_403_17@
}@H_403_17@
HelloWorld::touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type)@H_403_17@
switch@H_403_17@(type)@H_403_17@
case@H_403_17@Widget::TouchEventType::ENDED:@H_403_17@
<span style=@H_403_17@"white-space:pre"@H_403_17@> </span>@H_403_17@//参数依次为保存图片的名字,在控制台打印保存路径信息@H_403_17@
Director::getInstance()->saveScreenshot(@H_403_17@"homeLayer.png"@H_403_17@403_17@std::string &str){@H_403_17@
"str = %s"@H_403_17@403_17@
});@H_403_17@
break@H_403_17@default@H_403_17@:@H_403_17@
}@H_403_17@

1.4点击按钮,实现截图功能,最后图片保存在沙盒中,可在Xcode控制台下看到文件保存路径。

2、Cocos2d-x3.2

Cocos2d-x3.2中已经封装了截图共,使用如下
Util::captureScreen(@H_403_17@(bool,宋体; background:none">std::string&)>&afterCaptured,宋体; background:none">std::string&filename);@H_403_17@

猜你在找的Cocos2d-x相关文章