【cocos2dx】CCRenderTexture实现屏幕截图,再将截图显示出来的疑问

yxlovemoney 2014-08-27 04:52:29
现在截图的代码是这样的。

// 截取整屏
CCRenderTexture *texture = CCRenderTexture::create(WINSIZE_WIDTH, WINSIZE_HEIGHT/*530, 409*/);
texture->setPosition(ccp(141, 416));
texture->ignoreAnchorPointForPosition(true);
texture->setAnchorPoint(CCPointZero);
// 开始渲染
texture->begin();
// 访问当前运行屏幕 上的每个子结点
CCDirector::sharedDirector()->getRunningScene()->visit();
// 结束绘制
texture->end();
// 保存抓取到的图片
if (texture->saveToFile("../Resources/screenshot/screenshot.png"/*, kCCImageFormatPNG*/))
{
CCLOG("screenshot success");
showScreenshot(); // 显示出截取的图片
}
else
{
CCLOG("screenshot failed");
}



然后showScreenshot就是将刚才保存的图片,显示出来的函数
代码如下

void CPaintLayer::showScreenshot()
{
std::string strFilePath = CCFileUtils::sharedFileUtils()-fullPathForFilename("../Resources/screenshot/screenshot.png");
CCSprite *sprite = CCSprite::create(strFilePath.c_str(), CCRectMake(161, 57, 490, 409));//

sprite->setScale(0.7f);
sprite->setPosition(ccp(WINSIZE_WIDTH * 0.5f, WINSIZE_HEIGHT * 0.5f));
this->addChild(sprite, HIGHEST, SCREENSHOT_TAG);
}



现在的问题是,我第一次截图,显示出来了,然后我把界面改变一下(主要是通过滑屏改变了一下) 后再截图, 这次显示出来的,还是上一次所截的图,但我到保存截图的文件夹下查看,保存的确实是当前界面截的,但在程序中显示出来的却是上一次截图的内容,这实在太奇怪了。

后来自己也作了些修改,像调用CCRenderTexture的clear 清除一下内容,显示以后把用于显示截图的精灵移除之类,都是没有结果。
想不通这是为什么,求指教指教。
...全文
2694 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_22508525 2014-12-10
  • 打赏
  • 举报
回复
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png"; CCSprite* sp = CCSprite::create(filePath.c_str()); 是这二句看不懂
qq_22508525 2014-12-10
  • 打赏
  • 举报
回复
CCSize size = CCDirector :: sharedDirector()->getWinSize();//获得窗口的大小 std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png"; 这些语句具体都是什么意思啊?求大神
yxlovemoney 2014-08-28
  • 打赏
  • 举报
回复
我错了,之前我也尝试了用CCTextureCache来得到纹理,给精灵去显示,却没想到用它来清除缓存。 原来还有个CCTextureCache::sharedTextureCache()->removeUnusedTextures(); 现在可以了
yxlovemoney 2014-08-28
  • 打赏
  • 举报
回复
引用 1 楼 musicvs 的回复:
你两次截图都是在一次运行中进行的不?(就是程序没有关闭过) 如果是的话,估计就是图片缓存的问题了,你第一次调用showScreenshot函数的时候,图片screenshot.png被加载,同时也缓存起来了。 于是你第二次截图之后,再次调用showScreenshot函数,这时候显然就是从缓存中加载图片的,所以你看到的仍然是旧的图片~
我也觉得是缓存问题,但这类似乎没有什么清除缓存的方法,唯一看到的就一个 CCRenderTexture的clear
笨木头 2014-08-27
  • 打赏
  • 举报
回复
你两次截图都是在一次运行中进行的不?(就是程序没有关闭过) 如果是的话,估计就是图片缓存的问题了,你第一次调用showScreenshot函数的时候,图片screenshot.png被加载,同时也缓存起来了。 于是你第二次截图之后,再次调用showScreenshot函数,这时候显然就是从缓存中加载图片的,所以你看到的仍然是旧的图片~

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧