2011-12-30 21 views
0

對於我正在製作的元素週期表工具,我已經加入了一個效果,只要我將鼠標懸停在元素上(非常標準),就會更改alpha值。flash as3爲什麼在改變對象的alpha值時會有內存增益?

當我將鼠標懸停在我的元素上時,我注意到了內存中的一種神祕增益;使用SYSTEM.TOTAL_MEMORY - 當我將鼠標懸停在一個元素上時,內存使用量將增加大約0.005MB,當我將鼠標移出時,這個元素不會放棄。但是,如果我再次移動鼠標,則不會有第二個內存增益。

通過註釋掉功能位,我注意到,這是導致此阿爾法變化 - 這裏是它的代碼:

addEventListener(MouseEvent.MOUSE_OVER,highlightthis); 
addEventListener(MouseEvent.MOUSE_OUT,dehighlight); 

function highlightthis(evt:MouseEvent):void 
{ 
    if (evt.target is Element) 
     evt.target.alpha = 0.5; 

} 

function dehighlight(evt:MouseEvent):void 
{ 
    if (evt.target is Element) 
     evt.target.alpha = 1; 
} 

有誰知道爲什麼這個記憶的增益是當發生alpha值是否改變?奇怪的是爲什麼它只發生一次?

一些額外的信息:我的Element類是一個MovieClip,帶有幾個TextField,原始變量和一個MovieClip。它的mouseChildren屬性設置爲false(並且buttonMode屬性設置爲true)。

+0

我認爲應用alpha合成需要更多的內存並不奇怪。 – 2011-12-30 21:29:10

+0

只是任何人的興趣只是一個更新......我玩弄我的元素對象(alpha值正在改變的東西),並嘗試拿出一些TextFields等。當它只是一個影片剪輯;事實證明,是那些導致內存增益的TextFields--改變這些東西上的alpha值需要更多的內存! – xdl 2012-01-04 11:19:22

+0

我看了一下TextField的Adobe文檔,結果發現它沒有.alpha屬性。我也在網絡上進行了搜索,顯然要更改它們的alpha值,您需要使用blendMode屬性,引用blendMode.LAYER,我認爲這需要更多的內存。這必須是Flash在後臺執行的操作。 – xdl 2012-01-04 11:22:53

回答

3

這可能是在黑暗中拍攝的,我不知道原因,但可以嘗試猜測。透明度要求知道背景的顏色,此外,爲了顯示透明度,每像素需要多一個字節的信息(在BitmapData中)(即RGB增加33% - > ARGB)。所以,一旦玩家知道純色,就不用費心去保存不可見的背景,一旦背景變得可見,它自然需要更多的內存來保存顏色信息。一旦發生這種情況,它要麼緩存該信息,要麼只是不等到GC週期。

+0

我猜測它是因爲ColorTransform實例必須在幕後創建。 – JonnyReeves 2011-12-31 11:34:15

+0

像這樣 - alpha需要混合,這需要更多的資源。當鼠標移出時,內存不會放棄,因爲gc只在請求內存時運行,並且僅在需要時纔會運行。 – divillysausages 2011-12-31 17:10:13

+0

我已經等待了GC並且內存沒有被放棄,所以我想這是有道理的......改變alpha值,大體上說,永久性地將對象轉換成需要更多內存的東西。我想這不是什麼大問題,因爲它不是內存泄漏 - 我只是對它背後的解釋感到好奇。我會多玩一下;我將使元素類更簡單一些,或者簡單地使用MovieClip來做它,看看我是否得到相同的結果,然後在這裏發佈。 – xdl 2012-01-02 08:56:11

相關問題