微信小游戏截图,然后添加到场景中,目前添加后不显示,一直没报错,求助各位大佬帮忙
目前两种方案都有问题。
不知道怎么修改?希望大佬指点一下,谢谢!!!!
toTempFilePathWx() {
let node = new cc.Node();
node.parent = this.textNode;
let camera = node.addComponent(cc.Camera);
//canvas.depth = -10;
camera.node.x = cc.visibleRect.width/2;
camera.node.y = cc.visibleRect.height/2;
// 设置你想要的截图内容的 cullingMask
camera.cullingMask = 0xffffffff;
// 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
let texture = new cc.RenderTexture();
let gl = cc.game._renderContext;
// 如果截图内容中不包含 Mask 组件,可以不用传递第三个参数
texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height); //, gl.STENCIL_INDEX8
camera.targetTexture = texture;
// 渲染一次摄像机,即更新一次内容到 RenderTexture 中
camera.render();
// 这样我们就能从 RenderTexture 中获取到数据了
let data = texture.readPixels();
// 接下来就可以对这些数据进行操作了
//let canvas = document.createElement('canvas');
let canvas = wx.createCanvas();
let ctx = canvas.getContext('2d');
let width = canvas.width = texture.width;
let height = canvas.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 = srow*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");
let img = document.createElement("img");
img.src = dataURL;
var textures = new cc.Texture2D();
textures.initWithElement(img);
let spriteFrame = new cc.SpriteFrame();
spriteFrame.setTexture(textures);
var sprite = node.addComponent(cc.Sprite);
sprite.spriteFrame = spriteFrame;
node.anchorX = 0;
node.anchorY = 0;
node.x = 0;
node.y = 0;
},
toTempFilePathWx2 () {
var scheduler = cc.director.getScheduler();
var self= this;
scheduler.schedule(function () {
var canvas = wx.createCanvas();
var sceneSize = cc.director.getWinSize();
canvas.width = sceneSize.width;
canvas.height = sceneSize.height;
// canvas坐标左上角开始算 toTempFilePathSync 异步接口
canvas.toTempFilePath({
x: 0,
y:0,
width: sceneSize.width,
height: sceneSize.height,
destWidth: sceneSize.width,
destHeight: sceneSize.height,
fileType: 'png',
quality: 1,
success: function (res) {
let picUrl = res.tempFilePath;
self.sceneAddPic(picUrl);
},
fail: function () {
if (params.failed) {
params.failed();
}
}
});
}, this, 0, 0, 0, false);
},
sceneAddPic (urlimg) {
var node = new cc.Node("New Node");
var sprite = node.addComponent(cc.Sprite);
node.parent = this.addNode;//cc.director.getScene();
node.anchorX = 0;
node.anchorY = 0;
node.x = 360;
node.y = 640;
/*var textures = new cc.Texture2D();
textures.initWithElement(urlimg);
let spriteFrame = new cc.SpriteFrame();
spriteFrame.setTexture(textures);
sprite.spriteFrame = spriteFrame;*/
/*var img = new Image();
var texture = new cc.Texture2D();
img.src = urlimg;
texture.initWithElement(img);
let spriteFrame = new cc.SpriteFrame();
spriteFrame.setTexture(texture);
sprite.spriteFrame = spriteFrame;*/
var image = new Image();
image.src = urlimg;
image.onload = function () {
try{
image.onload = null;
image.onerror = null;
var texture = new cc.Texture2D();
texture.initWithElement(image);
texture.handleLoadedTexture();
let spriteFrame = new cc.SpriteFrame();
spriteFrame.setTexture(texture);
sprite.spriteFrame = spriteFrame;
}catch(e){}
};
/*cc.loader.load(urlimg, (err, texture)=>{
let spriteFrame = new cc.SpriteFrame();
spriteFrame.setTexture(texture);
sprite.spriteFrame = spriteFrame;
});*/
},
