如何实现单节点截图,环境是2.0.9,官方的例子是截屏,有没有单节点截图的例子或者提供下思路,希望官方能写个例子
/**
* 以某个节点为目标,截取目标节点内容图片,返回临时图片路径;想要截图干净点,请把目标节点移到屏幕之外
* @param {Object} distNode 截图的目标节点
* @example
* captureNode2(cc.find(‘Canvas’)).then(imgUrl=>{console.log(imgUrl)});
*/
captureNode2(distNode,showLoading=0){
return new Promise((resolve , reject) => {
// if(!Game.isWechat()){
// reject(‘not wechat’);
// return;
// }
showLoading && wx.showLoading();
// distNode.zIndex = 10;
let width = Math.floor(distNode.width);
let height = Math.floor(distNode.height);
let cameraNode = distNode.getChildByName(‘cameraNode’);
if(!cameraNode){
cameraNode = new cc.Node(‘cameraNode’);
cameraNode.parent = distNode;
cameraNode.x = 0;
cameraNode.y = 0;
}
let camera = cameraNode.getComponent(cc.Camera);
if(!camera){
camera = cameraNode.addComponent(cc.Camera);
}
// 设置你想要的截图内容的 cullingMask
camera.cullingMask = 0xffffffff;
// 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
let texture = new cc.RenderTexture();
// 初始化纹理大小,如果截图内容中不包含 Mask 组件,可以不用传递第三个参数
texture.initWithSize(width, height, cc.game._renderContext.STENCIL_INDEX8);
camera.targetTexture = texture;
// 渲染一次摄像机,即更新一次内容到 RenderTexture 中
camera.render();
// 这样我们就能从 RenderTexture 中获取到数据了
let data = texture.readPixels();
console.log(data);
// 接下来就可以对这些数据进行操作了
let tempCanvas = document.createElement('canvas');
let ctx = tempCanvas.getContext('2d');
tempCanvas.width = texture.width;
tempCanvas.height = texture.height;
// 官方提供方法,生成图片速度较慢
let rowBytes = width * 4;
for (let row = 0; row < height; row++) {
let srow = height - 1 - row;//图片翻转的处理
let imageData = ctx.createImageData(width, 1);
let start = Math.floor(srow*width*4);
for (let i = 0; i < rowBytes; i++) {
imageData.data[i] = data[start+i];
}
ctx.putImageData(imageData, 0, row);
}
// let dataURL = tempCanvas.toDataURL("image/png");
// console.log(dataURL);
// resolve(dataURL);
// return;
var tempFilePath = cc.game.canvas.toTempFilePathSync({
x: 0,
y: 0,
width: width,
height: height,
destWidth: width,
destHeight: height,
});
if(tempFilePath){
showLoading && wx.hideLoading();
resolve(tempFilePath);
}else{
showLoading && wx.hideLoading();
reject(err);
}
})
}
最近发现小游戏公共库版本6.2以上加入子域排行榜的项目,该方法截图会是全透明图。上面代码已被强行拆分,请复制完整代码测试。
请问下,如何保存截图呢,网上有很多例子用的saveToFile,但是我Android调试报错,renderTexture没有saveToFile这个方法
请问加入子域 截图透明问题解决了吗