Cocos2d-x 3.x基础学习: 屏幕截图ScreenShot方法总结

2015年03月23日 10:07 0 点赞 0 评论 更新于 2025-11-21 18:12

在开发过程中,屏幕截图功能是一项常用的需求。本文将详细比较Cocos2d-x 2.x版本与3.x版本中两种不同的屏幕截图方式。

两种截图方式概述

1. 使用RenderTexture

这是Cocos2d-x 2.x版本中最常用的截图方法。RenderTexture是一个动态纹理类,它能够动态创建纹理图片。

2. 使用utils::captureScreen()

这是在Cocos2d-x 3.2版本中新增的截图方法。

使用RenderTexture进行屏幕截图

屏幕截图主要步骤

  1. 开始截图:调用render->begin()方法,开始进行屏幕内容的捕捉。
  2. 遍历场景:使用scene->visit()方法,遍历场景中的所有子节点信息,并将其绘制到RenderTexture对象中。
  3. 结束截图:调用render->end()方法,结束屏幕内容的捕捉。
  4. 保存截图:使用render->saveToFile(string& filename, Image::Format format)方法保存截图。其中,Image::Format为图片格式,支持PNGJPG两种格式,分别对应Image::Format::PNGImage::Format::JPG

截图方法示例代码

void HelloWorld::capture(Ref* sender)
{
CCLOG("ScreenShot");
// 获取屏幕尺寸大小
Size winSize = CCDirector::sharedDirector()->getWinSize();
// 创建RenderTexture,纹理图片大小为窗口大小winSize
RenderTexture* screen = RenderTexture::create(winSize.width, winSize.height);
// 屏幕截图
screen->begin(); // 开始抓屏
this->getParent()->visit(); // 遍历当前场景Scene的所有子节点信息,画入screen中
screen->end(); // 结束抓屏
// 保存截图
screen->saveToFile("ScreenShot.png", Image::Format::PNG); // 保存为PNG格式
// screen->saveToFile("ScreenShot.jpg", Image::Format::JPG); // 保存为JPG格式
}

保存路径

  • Win32:截图文件将保存在Debug.win32/目录下。
  • Android:截图文件将保存在/data/data/com.summer.hello/files/ScreenShot.png

使用utils::captureScreen()进行屏幕截图

方法定义

// afterCaptured:该方法将在捕捉指令后被执行。
// bool: 捕捉屏幕截图是否成功。
// string: 截图存储的路径。
// filename:截图的名字。
// 可以只是一个文件名,如 "ScreenShot.png"。
// 也可以是一个绝对路径,如 "/sdcard/ScreenShot.png"。
void captureScreen(const std::function<void(bool, const std::string&)>& afterCaptured, const std::string& filename)

截图方法示例代码

// 屏幕截图
void HelloWorld::capture(Ref* sender)
{
CCLOG("ScreenShot");
utils::captureScreen(CC_CALLBACK_2(HelloWorld::afterCapture, this), "ScreenShot.png");
}

// 截图后执行afterCapture
void HelloWorld::afterCapture(bool succeed, const std::string& outputFile)
{
if (succeed)
{
CCLOG("%s", outputFile.c_str());
// 显示截图
Size winSize = CCDirector::sharedDirector()->getWinSize();
Sprite* sp = Sprite::create(outputFile);
sp->setPosition(winSize / 2);
this->addChild(sp);
sp->setScale(0.25); // 放缩
}
else
{
CCLOG("Capture screen failed.");
}
}

保存路径

  • filename可以只是一个文件名,此时截图将保存到相对路径,例如 "ScreenShot.png"
  • filename也可以是一个绝对路径,例如"/sdcard/ScreenShot.png"

综上所述,开发者可以根据项目的具体需求和使用的Cocos2d-x版本,选择合适的屏幕截图方法。在Cocos2d-x 3.2及以上版本中,utils::captureScreen()方法使用起来更加方便,并且提供了回调函数来处理截图结果。而RenderTexture方法在旧版本中广泛使用,对于熟悉该方法的开发者来说,仍然是一个不错的选择。

作者信息

boke

boke

共发布了 3994 篇文章