按照文档实现截屏只截到
[image][image]
-
Creator 版本: 2.4.3
-
目标平台: chrome
demo版本如下 -
重现方式:
Test.rar (819.1 KB)
麻烦大佬帮忙看看这个是版本的问题吗?
按照文档实现截屏只截到
Creator 版本: 2.4.3
目标平台: chrome
demo版本如下
重现方式:
Test.rar (819.1 KB)
麻烦大佬帮忙看看这个是版本的问题吗?
记得之前用cocos creator 2.1.3时还是好的,
有人做过截屏的吗,能给个正常截屏的demo吗
public static captureTexture(cullingMask: number = 0, camera: cc.Camera = null) {
let node: cc.Node = null;
let needRemove = false;
if (!camera) {
needRemove = true;
node = new cc.Node();
//注意了,这里要讲节点的位置改为右上角,不然截图只有1/4
// node.width = cc.view.getVisibleSize().width;
// node.height = cc.view.getVisibleSize().height;
// node.x = node.width / 2;
// node.y = node.height / 2;
node.parent = cc.director.getScene();
camera = node.addComponent(cc.Camera);
camera.backgroundColor = cc.Color.TRANSPARENT;
camera.clearFlags = cc.Camera.ClearFlags.DEPTH | cc.Camera.ClearFlags.STENCIL | cc.Camera.ClearFlags.COLOR
// 设置你想要的截图内容的 cullingMask
camera.cullingMask = cullingMask || 0xffffffff;
camera.alignWithScreen=true;
}
// 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
let texture = new cc.RenderTexture();
let gl = (cc.game as any)._renderContext; // STENCIL_INDEX8 0x8D48 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL_API/Constants
// 如果截图内容中不包含 Mask 组件,可以不用传递第三个参数
texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height,gl.STENCIL_INDEX8);
// texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height, (cc as any).gfx.RB_FMT_S8);
camera.targetTexture = texture;
// 渲染一次摄像机,即更新一次内容到 RenderTexture 中
camera.render(cc.director.getScene());
if (needRemove) {
camera.enabled = false;
camera.destroy();
} else {
camera.targetTexture = null;
}
// 这样我们就能从 RenderTexture 中获取到数据了
let data = texture.readPixels();
let width = texture.width;
let height = texture.height;
let picData = this.filpYImage(data, width, height);
//翻转Y
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
let rowBytes = width * 4;
for (let row = 0; row < height; row++) {
let startRow = height - 1 - row;
let imageData = ctx.createImageData(width, 1);
let start = startRow * width * 4;
for (let i = 0; i < rowBytes; i++) {
imageData.data[i] = data[start + i];
}
ctx.putImageData(imageData, 0, row);
}
let dataURL = canvas.toDataURL("image/jpeg");
console.log(dataURL);
if (node) {
node.removeFromParent();
node.destroy();
}
return { data: picData, width: width, height: height };
}
代码这样子按官方文档里面写的应该没问题啊,我加上 camera.render(cc.director.getScene());这个貌似也不行
找到问题了,摄像机位置不对, node.position = cc.v3(cc.visibleRect.width/2,cc.visibleRect.height/2),他默认被放置在左下角的点位置上,从而只截取了左下的四分之一屏
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。