cc.Class({ extends: cc.Component, properties: { }, start() { let self =this; let url = ''; this.scheduleOnce(function(){ url = self.screenshot().src; console.log(url) },2); // this.scheduleOnce(function(){ // self.setConsoleImage(url); // },4); }, screenshot() { let node = cc.director.getScene().getChildByName("Canvas").getChildByName("screenshot"); let camera = node?.getComponent(cc.Camera); if(!node){ node = new cc.Node("screenshot"); node.parent = cc.director.getScene().getChildByName("Canvas"); camera = node.addComponent(cc.Camera); } // 设置你想要的截图内容的 cullingMask // camera.cullingMask = 0xffffffff; // 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。 let texture = new cc.RenderTexture(); texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height); camera.targetTexture = texture; // 渲染一次摄像机,即更新一次内容到 RenderTexture 中 camera.render(); // 这样我们就能从 RenderTexture 中获取到数据了 let data = texture.readPixels(); // 接下来就可以对这些数据进行操作了 let canvas = document.createElement("canvas"); let ctx = canvas.getContext("2d"); canvas.width = texture.width; canvas.height = texture.height; let width = texture.width; let 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; return img; }, setConsoleImage(url) { var img = new Image(); img.style.display = "none"; document.body.appendChild(img); img.src = url; img.onload = function () { var css = [ "padding: " + (img.height / 2 - 8) + "px " + img.width / 2 + "px;", "line-height: " + img.height + "px;", "background-image: url(" + url + ");", ]; console.log("%c ", css.join("")); }; } });