关于 Cocos2d-x 3.x+截屏功能

本文介绍了一个在Cocos2d-x中遇到的截屏问题及解决方案。问题表现为无法通过Director::getInstance()->getRunningScene()获取当前场景。解决方法是调整RenderTexture创建时的参数,指定GL_DEPTH24_STENCIL8格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

在写cocos2d-x截屏功能的时候遇到了一个问题。

虽然调用了 Director::getInstance()->getRunningScene(); 但是并没有获取到当前Scene。

出现如图类似情况。


C++代码如下:

void SocialUtils::screenshot()
{
    int h = Director::getInstance()->getWinSize().height;
    int w = Director::getInstance()->getWinSize().width;
    int o_y = Director::getInstance()->getVisibleOrigin().y;
    int o_x = Director::getInstance()->getVisibleOrigin().x;
    CCLOG("w:%d--h:%d",w,h);
     //定义一个屏幕大小的渲染纹理
    RenderTexture *renderTexture = RenderTexture::create((int)(w*0.85), (int)(h*0.85), Texture2D::PixelFormat::RGBA8888);
    
    Scene* getscene = Director::getInstance()->getRunningScene();
    cocos2d::Point ancPos = getscene->getAnchorPoint();
    
    cocos2d::Rect fullRect;
    fullRect.setRect(o_x,o_y,w,h);
    cocos2d::Rect virtualViewPort;
    virtualViewPort.setRect(o_x,o_y,w,h);
    renderTexture->setVirtualViewport(Vec2(o_x+w*0.18,o_y+h*0.2),fullRect,virtualViewPort);
    //渲染纹理开始捕捉
    renderTexture -> beginWithClear(0.0f, 0.0f, 0.0f, 0.0f);
    //绘制当前场景
    getscene-> visit();
    renderTexture -> end();
     //保存png
    renderTexture -> saveToFile(StringUtils::format("screenshot.png"),Image::Format::PNG,true,[=](RenderTexture*,const std::string& m_path)

{

//保存完毕之后的回调

std::string path = FileUtils::getInstance()->getWriteablePath();

});

解决方法:

创建renderTexture的时候得调用 
RenderTexture * RenderTexture::create(int w ,int h, Texture2D::PixelFormat eFormat, GLuint uDepthStencilFormat)

然后,指定最后一个参数为: 
GL_DEPTH24_STENCIL8 

将其改为:

RenderTexture *renderTexture = RenderTexture::create((int)(w*0.85), (int)(h*0.85), Texture2D::PixelFormat::RGBA8888,GL_DEPTH24_STENCIL8);


OK,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值