#Cocos Creator 2.2.0 截图出现异常黑色背景

2020.1.16 更新

经过一番测试,Cocos Creator 2.2.x改变了相机的渲染方式。

正确截图并不需要不开启3D功能

1). 如果是全屏的截图,则继续沿用的旧的代码,直接将RenderTexture的size设置为屏幕大小即可。
2). 如果是截取特定范围内的内容,
首先,RenderTexture使用屏幕尺寸
其次,只读取RenderTexture指定范围的像素点
最后,将像素信息转换为Image

参考代码

// 1. 设定RenderTexture的大小为全屏
let winSize = cc.winSize;
renderTexture.initWithSize(winSize.width, winSize.height, cc.game["_renderContext"].STENCIL_INDEX8);

// 2. 获取指定区域的像素点信息
let size = this.offscreenNode.getContentSize();
let pixels = new Uint8Array(size.width * size.height * 4);
let x = renderTexture.width/2 - this.offscreenNode.width/2;
let y = renderTexture.height/2 - this.offscreenNode.height/2;
let w = this.offscreenNode.width;
let h = this.offscreenNode.height;
renderTexture.readPixels(pixels, x, y, w, h);

// 3. 将pixels信息转换为image

问题背景

Cocos Creator 2.0.x 原本工作正常的截图功能

代码参考 《#Cocos Creator# 截图功能代码》 https://xmanyou.com/cocos-creator-jie-tu-gong-neng-dai-ma/

升级到2.2.0以后发现截图出现了问题。

截图的分辨率还是正常的,但是,实际的图像尺寸被缩小了很多,外围还增加了很多黑色块(背景色)

旧的截图是这样子:

新的截图变成了这样子:

解决方法

猜想

为什么会这样子呢?

这个截图非常像是在Unity中调整摄像机参数时看到的情况。

联想到 Cocos Creator在2.1.x版本后添加了3D功能,是否是因为摄像机的3D功能造成的影响呢?

测试

于是打开截图用的Camera的3D属性,进行测试。

结果我直接被整蒙了……

因为,打开3D选项,什么都不改的情况下,截图直接就黑屏了……

检查

深呼吸,淡定,再淡定~

先检查了一下,相机的类型和参数:

Ortho=true
表示是正交投影相机,对于2D游戏来说,没问题。

Near Plane=1
摄像机的近剪裁面是1?
2D场景的节点应该都是在0吧……是不是这个导致元素都没有被渲染呢?

Ortho Size=10
这个是摄像机在正交投影模式下的视窗大小

调试

把Near Plane改成0以后,终于能截图成功了:

不过还是有点问题,还需要调整Ortho Size参数。

结论

经过一番测试,调整成以下参数后,截图基本正常了。

Near Plane=0
Ortho Size=150

最新的截图基本跟旧版截图一致了。