2017-04-16 65 views
0

我正在畫布上繪製一些對象,但如果稍後我按需更改背景圖像,則已繪製的對象位於背景圖像後面。如何將已經繪製的物體放在前面。以下是我用來更改背景圖片的示例代碼。在p5JS畫布上更改背景圖像顯示背景圖像背後的已繪製對象

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

回答

1

您需要繪製/更改背景圖片之前設置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

不客氣:) –

0

你可以只保存你的狀態在某種類型的數據結構和重繪一切每一幀。

另一種方法是將對象繪製到緩衝區圖形而不是直接繪製到畫布。然後將背景繪製到畫布上,然後將緩衝區繪製到畫布上。

更多資訊請訪問the reference

+0

非常感謝,凱文Workman..your解決方案也工作。我有一個問題「會不會在數據結構或緩衝區中繪製對RAM有任何影響?」 – Tanzeem

+0

@Tanzeem唯一確定的方法是自己做一些測量。但通常情況下,將所有內容存儲在數據結構中可爲您提供更多自由度和控制權,但也需要更多時間並需要更多內存。使用緩衝圖像需要恆定的內存量,但是給你更少的自由度和控制力。你採取的方法完全取決於你的環境。 –