2010-01-21 44 views
5

我正在處理我的第一個Flash項目,並且對於我的預加載器,我想根據加載的百分比做一個非常簡單的漸變。預加載器說「77%加載...」,其中數字77是一個名爲percentLoaded的動態文本實例。我希望percentLoaded的textColor以灰度級從#000000到#FFFFFF的漸變更改。基於加載文件百分比的RGB漸變

因此,我不能簡單地做:

percentLoaded.textColor=(currentValue/100)*0xFFFFFF; 

這只是轉換的文字顏色到FFFFFF的倍數,但因爲它不是三個獨立的組件輸出的顏色。目前,這裏就是我的了:

percentLoaded.text=currentValue.toString(); 
percentLoaded.textColor=rgb2hex((currentValue/100)*255, (currentValue/100)*255, (currentValue/100)*255); 

其中「rgb2hex」是在類中定義爲這樣的功能:

public function rgb2hex(r:Number, g:Number, b:Number) { 
    return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase(); 
} 

它看起來並不像這實際上是改變顏色字體雖然。我已經導入了flash.text.TextField和flash.display.MovieClip,但我不確定是否缺少其他東西。這會更容易處理字符串連接嗎?或者是否可能會出現currentValue/100並將其作爲數字傳遞?

如果好奇,我找到了rgb2hex here的代碼。

謝謝!

回答

6
percentLoaded.textColor=(currentValue/100)*0xFFFFFF; 

這接近。

爲了得到一個灰度,你確實需要有各組件,但是這仍然可以通過你的類似的方法來完成:

percentLoaded.textColor = uint((currentValue/100) * 0xFF) * 0x010101; 
+0

這不起作用。嘗試將currentValue設置爲1.您將獲得0x28f5c。您需要在乘以0x010101之前將((currentValue/100)* 0xFF)強制轉換爲int。 – Ponkadoodle 2010-01-21 01:05:53

+0

沒錯,我忘記了,修好了;謝謝你的注意!演員實際上需要繼續進行除法結果,因爲這就是它發生的原因 - Flash的'Number'類是IEE浮點數。投向uint應該可以解決它。 – LiraNuna 2010-01-21 01:08:14

+1

不,當前值介於0-100之間。如果你在分割之後進行投射,但在乘以0xFF之前,你會得到一個0或1.他想要全灰度,而不僅僅是黑/白。而且這個問題並不是浮點不準確。這是因爲你的格式(* 0x010101)基本上是三個字段(01,01,01)。它並不期待一個領域的某些東西受到另一個領域的影響。但是使用大於255的值,允許低場影響高場,而在整數之間的值允許高場影響較低場。試試1.5 * 0x010101來看看我的意思。 – Ponkadoodle 2010-01-21 01:18:42

1
percentLoaded.textColor = int((currentValue/100) * 0xFF) * 0x010101; 

在乘以0x010101之前強制轉換爲int是必須的。 8位顏色值只能是0-255之間的整數。如果不在這些範圍內,乘以0x010101可能導致數字從一個顏色分量(RR,GG,BB)溢出到另一個顏色分量(B-> G,G-> R)。但是如果不是整數(R-> G,G-> B),它們也可以用另一種方式進行。我假設currentValue是0-100之間的任何數字。

考慮這一點,與每一位它自己的顏色分量(十進制):

5.0 * 111 = 555 = 5R, 5G, 5B 
5.5 * 111 = 610.5 = 6R, 1G, 0.5B 
1

如果這對你的作品

percentLoaded.textColor=(currentValue/100)*0xFFFFFF; 

然後你可以做

var percent = currentValue/100; 
percentLoaded.textColor = Math.floor(percent*0xFF) * 0x010101; 
+0

這不起作用。嘗試將currentValue設置爲1.您將獲得0x28f5c。您需要在乘以0x010101之前將其轉換爲int。 – Ponkadoodle 2010-01-21 01:06:53

+0

@wallacoloo:對,你是固定的。 – sberry 2010-01-21 14:55:32

3

你很幸運,我碰巧在一個項目中最近做了這個,只有差別nt顏色。這是一個函數,它將返回兩個其他顏色之間的顏色值,基於0-1的範圍。我認爲這些代碼很自我解釋,但是如果遇到任何問題,請告訴我。

private function getBetweenColourByPercent(value:Number = 0.5 /* 0-1 */, highColor:uint = 0xFFFFFF, lowColor:uint = 0x000000):uint { 
    var r:uint = highColor >> 16; 
    var g:uint = highColor >> 8 & 0xFF; 
    var b:uint = highColor & 0xFF; 

    r += ((lowColor >> 16) - r) * value; 
    g += ((lowColor >> 8 & 0xFF) - g) * value; 
    b += ((lowColor & 0xFF) - b) * value; 

    return (r << 16 | g << 8 | b); 
} 

Tyler。

+0

謝謝泰勒,這實際上可能會有用一點點,例如,我可能會選擇將預加載器文本置於紅色和白色之間。 – Rockmaninoff 2010-01-22 16:13:22