2011-05-25 209 views
2

我正在做一個模擬器項目,測試幾種基於A *的算法並顯示它們如何工作及其結果。這些算法都是多代理程序,並在網格地圖環境中運行。使用java圖形API繪製圖層

我用了一個JPanel作爲網格,其中包含一個Cell的二維數組,其中每個Cell都是一個自定義類,它擴展了Component類,並使用paint方法在每個單元格內繪製我需要的東西。 對於單元格內部的繪圖,我使用諸如Graphics.fillRect或Graphics.drawImage之類的方法來填充每個單元格的某種顏色或圖標)。

我在網格上爲每個代理的開始位置和目標位置使用了一個特殊的圖標。 我的問題是,我想能夠在同一個單元上繪製多個項目。

例如,我希望能夠通過以特殊顏色沿路徑繪製單元格來顯示其中一個代理的路徑,並且該路徑可能會經過不同代理的起始位置,所以我希望成爲能夠用顏色填充單元格並在頂部繪製圖標。 在另一個例子中,我希望能夠使用alpha混合來混合兩種顏色。

如果我將graphics.fillRect()與一個具有alpha的顏色一起使用,然後使用具有alpha值的不同顏色再次使用它,它將不起作用,因爲最後一個fillRect()將覆蓋第一個調用。

有沒有一種方法可以實現我需要使用與我創建的相同單元格組件或我應該如何實現它不同? 也許有更好的解決這個問題的辦法? 我真的很感謝在這個問題上的任何建議。

+0

對[alpha複合](http://keithp.com/~keithp/porterduff/p253-porter.pdf)有更深的理解可能會有所幫助。此外,如果您接受和/或上調有用答案,人們會更認真地回答您的問題。 – trashgod 2011-05-25 10:05:06

+0

完成,我理解alpha合成,但它不能解決問題。如果你繪製一個帶有50%alpha的矩形,然後繪製另一個矩形,第二個將會覆蓋它而不是混合它 – 2011-05-25 11:37:38

回答

2

如果您繪製一個帶有50%alpha的矩形,然後繪製另一個矩形,第二個將覆蓋它而不是混合它。

這取決於模式。這種方便的utility顯示了使用AlphaComposite中定義的模式混合不同顏色的結果。可用的source code可能會爲您的項目提供一些見解。

附錄:

我試圖複合的東西是在同一Component

examplecited正是這樣做的,因爲做到這一點example。如果AlphaComposite不符合您的要求,您可以隨時改變色調,飽和度和/或值;這example組成一個基於飽和度的顏色表。

+0

我嘗試過使用alphaComposite對象,但它沒有多大幫助,因爲我試圖合成的東西是在我已經在上面闡述了相同的組件 – 2011-05-26 13:20:24

+0

。 – trashgod 2011-05-26 15:11:14

+0

謝謝,我會試着看看這個例子,看看我能做些什麼 – 2011-05-26 16:00:08