在p5JS画布上更改背景图像显示背景图像背后的已绘制对象
我正在画布上绘制一些对象,但如果稍后我按需更改背景图像,则已绘制的对象位于背景图像后面。如何将已经绘制的物体放在前面。以下是我用来更改背景图片的示例代码。在p5JS画布上更改背景图像显示背景图像背后的已绘制对象
function draw() { if(chnBg){ //if change background is clicked loadImage("images/Grid_Image.png",function(bg){
background(bg);
}); } }
您需要绘制/更改背景图片之前设置globalCompositeOperation
到destination-over
...
let canvas;
// setup
function setup() {
canvas = createCanvas(width, height);
}
// draw
function draw() {
if (chnBg) { //if change background is clicked
loadImage("images/Grid_Image.png", function(bg) {
canvas.drawingContext.globalCompositeOperation = 'destination-over'; //<-- set this
background(bg);
});
}
}
你可以只保存你的状态在某种类型的数据结构和重绘一切每一帧。
另一种方法是将对象绘制到缓冲区图形而不是直接绘制到画布。然后将背景绘制到画布上,然后将缓冲区绘制到画布上。
更多资讯请访问the reference。
非常感谢,凯文Workman..your解决方案也工作。我有一个问题“会不会在数据结构或缓冲区中绘制对RAM有任何影响?” – Tanzeem
@Tanzeem唯一确定的方法是自己做一些测量。但通常情况下,将所有内容存储在数据结构中可为您提供更多自由度和控制权,但也需要更多时间并需要更多内存。使用缓冲图像需要恒定的内存量,但是给你更少的自由度和控制力。你采取的方法完全取决于你的环境。 –
非常感谢您的帮助,moáois。这是工作 – Tanzeem
不客气:) –