2016-03-14 28 views
0

我正在使用CanvasRenderingContext2D中的路徑繪製一組重疊形狀。這很好,但我現在想要統一所有這些路徑,以便當我使用半透明顏色填充時,不顯示重疊。另外我想要描繪一個統一形狀的輪廓。有關如何實現這一目標的任何建議?在CanvasRenderingContext2D中合併多個路徑以作爲集合填充和描邊

+0

您正在使用Phaser JS框架,是否正確?如果是這樣,正確的垃圾實際上是「相位框架」。你還可以包含你已經有的相關代碼嗎?它使人們更容易幫助。 –

+1

TBH:我使用Phaser,但這不是Phaser問題,所以我只是一起刪除Phaser標籤... –

+1

我在寫[CanvasRenderingContext2D中的透明組時]時注意到了這個問題(http://stackoverflow.com/q/36578651/1468366)。對於訪問這篇文章的一些用戶,[clipper](https://sourceforge.net/projects/jsclipper/)可能是合併路徑的有用工具。 – MvG

回答

0

謝謝Mark但是我想我已經找到了一個更好的方法來做到這一點。

我在空白位圖數據上繪製我的形狀,然後將其用作alpha蒙版...

1

如果您不希望重疊的半透明像素進行交互,可以將半透明像素(RGBA格式)更改爲等效不透明像素(RGB格式)。

function RGBAtoRGB(r, g, b, a, backgroundR,backgroundG,backgroundB){ 
    var r3 = Math.round(((1 - a) * backgroundR) + (a * r)) 
    var g3 = Math.round(((1 - a) * backgroundG) + (a * g)) 
    var b3 = Math.round(((1 - a) * backgroundB) + (a * b)) 
    return "rgb("+r3+","+g3+","+b3+")"; 
} 

您必須使用單獨的beginPath繪製每個子形狀。這是必要的,因爲每個beginpath只能獲得一個樣式(樣式== fillStyle)。

根據您的設計要求,您可能需要重新排列子圖形的繪製順序,以便將所需的不透明形狀置於頂部。