在p5JS画布上更改背景图像显示背景图像背后的已绘制对象

问题描述:

我正在画布上绘制一些对象,但如果稍后我按需更改背景图像,则已绘制的对象位于背景图像后面。如何将已经绘制的物体放在前面。以下是我用来更改背景图片的示例代码。在p5JS画布上更改背景图像显示背景图像背后的已绘制对象

function draw() { if(chnBg){ //if change background is clicked loadImage("images/Grid_Image.png",function(bg){ 
background(bg); 
}); } } 

您需要绘制/更改背景图片之前设置globalCompositeOperationdestination-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); 
    }); 
    } 
} 
+0

非常感谢您的帮助,moáois。这是工作 – Tanzeem

+0

不客气:) –

你可以只保存你的状态在某种类型的数据结构和重绘一切每一帧。

另一种方法是将对象绘制到缓冲区图形而不是直接绘制到画布。然后将背景绘制到画布上,然后将缓冲区绘制到画布上。

更多资讯请访问the reference

+0

非常感谢,凯文Workman..your解决方案也工作。我有一个问题“会不会在数据结构或缓冲区中绘制对RAM有任何影响?” – Tanzeem

+0

@Tanzeem唯一确定的方法是自己做一些测量。但通常情况下,将所有内容存储在数据结构中可为您提供更多自由度和控制权,但也需要更多时间并需要更多内存。使用缓冲图像需要恒定的内存量,但是给你更少的自由度和控制力。你采取的方法完全取决于你的环境。 –