簡體   English   中英

在J2ME中繪制透明弧,而不是圖像?

[英]Draw transparent arcs, not images, in J2ME?

我一直很開心地為開源游戲編寫代碼,但是我只是意識到Graphics.setColor()不理解0xAARRGGBB。 我想獲得越來越透明的顏色,在其中繪制一些弧線(圓盤)。 我的目標是使它們像下面的圖像一樣彼此發光: http : //kenai.com/projects/xplode (那里的徽標)

我知道可以對圖像(getRGB等)進行透明度操縱,但是對於尺寸和透明度變化較大的游戲,這證明非常慢。

有什么方法可以在不使用JSR 184或JSR-226的情況下在J2ME中繪制透明的可伸縮光盤? 我擔心現在有一種“好的”方法來處理它,而我會繼續沒有這種影響,但是為什么不問何時有需要呢?

只要將透明度降低到最低程度並遠離舊手機,透明度材料就不必太慢。 您還應該注意,在某些實現中,有時會忽略alpha,有時會將其量化為難看的水平(某些摩托羅拉手機將alpha值捕捉到最接近的2位值。Bleh)。

我很想將其作為疊加在屏幕上的單個透明層進行處理。 保持一個int數組,該大小為要繪制透明像素的屏幕大小(int [width * height])。 在每一幀上,調用Image.createRGBImage並將該圖像繪制到屏幕上。

作為實驗,您可能首先想通過將常量值填充到此數組並將其繪制到屏幕上來確保alpha處理不會使您變慢。 例如0x80FF0000應該在屏幕上融合紅色調,您可以輕松地看到此alpha業務是否可以在您選擇的手機上使用,即可以測量它如何影響幀速率。

接下來,您需要將圓形繪制到該數組中。 尋找布雷森漢姆(Bresenham)的圓圖繪制算法,然后對其進行重新加工以繪制成一個整數像素數組。 您可能想要維護一個查找表,該表具有要計算的每個半徑的預先計算的半徑/ sqrt(2)。

接下來是如何混合顏色以使其重疊。 最簡單的方法就是將帶有alpha的顏色值繪制到像素中。 您不會將顏色與已經繪制的圓混合,但是會很便宜,並且圓會與背景混合。

另一種方法是忽略顏色混合,但對alpha進行簡單合並。 例如

newColour = ((destColour & 0xFF000000) + 0x20000000) | srcColour;
/* Where source colour is of the form 0x00RRGGBB. Note: Adding 0x20 to alpha each
 * time will only work for 7 overlapping circles. */

重疊圓圈的顏色將主導下一個圓圈,但是Alpha重疊的地方將變得更加不透明,這至少會使玩家正確看到所有圓圈。

如果要進行精確的顏色混合,則計算會復雜得多,尤其是將一個帶有alpha的值混合到另一個帶有alpha的值時,這是因為每個像素的顏色貢獻隨每種顏色中alpha的比例而變化。 這不是不可能,但要使其高效卻是一個痛苦。 我很想去一個便宜的選擇。

我不確定您是否可以單獨使用Graphics類以合理有效的方式執行此操作。 您為什么不嘗試MIDP JSR 239的OpenGL ES規范?

您可以嘗試使用getRGB()和drawRGB()來代替使​​用createRGBImage()創建每幀圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM