透明度的東西不需要緩慢,只要你保持在最低限度,遠離舊手機。你還應該注意到alpha在某些實現中有時會被忽略,有時會被量化爲醜陋的級別(一些摩托羅拉手機會將alpha值捕捉到最接近的2位值Bleh)。
我很想把它作爲疊加在屏幕上的單個透明層來處理。將int數組保留爲屏幕的大小,您將在其中繪製透明像素(int [width * height])。在每一幀上,調用Image.createRGBImage並將該圖像繪製到屏幕上。
作爲一個實驗,您可能首先需要確保alpha處理不會因爲用常量值填充此數組並將其繪製到屏幕上而使您減慢速度。例如。 0x80FF0000應該在屏幕上混合紅色色調,並且如果此alpha業務可以在您選擇的手機上使用,則可以輕鬆查看,即可以測量它對幀速率的影響。
接下來,您需要將圓圈繪製到此數組中。查找Bresenham's circle drawing algorithm並將其重寫爲繪製爲像素的int數組。您可能需要維護一個查找表,該表對於您想要繪製的每個半徑都有一個預先計算的半徑/ 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的比例每種顏色。這不是不可能的,但使其高效是一種痛苦。我很想去找一個更便宜的選擇。
來源
2009-08-03 09:12:44
izb
好主意,謝謝!我會馬上寫一些示例代碼來測試設備是否可以處理這種方法。 – 2009-08-03 11:44:47