我正在畫布上繪製一些對象,但如果稍後我按需更改背景圖像,則已繪製的對象位於背景圖像後面。如何將已經繪製的物體放在前面。以下是我用來更改背景圖片的示例代碼。在p5JS畫布上更改背景圖像顯示背景圖像背後的已繪製對象
function draw() { if(chnBg){ //if change background is clicked loadImage("images/Grid_Image.png",function(bg){
background(bg);
}); } }
我正在畫布上繪製一些對象,但如果稍後我按需更改背景圖像,則已繪製的對象位於背景圖像後面。如何將已經繪製的物體放在前面。以下是我用來更改背景圖片的示例代碼。在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
不客氣:) –