2013-05-07 65 views
0

所以我有一個Tile類,它帶有一個sprite變量,用於保存圖塊的圖形。在鼠標懸停時,我對圖形進行ColorTransform。似乎工作正常。在老鼠身上,我試着改回它。納達。事實上,兩次翻轉同一個瓷磚會增加alpha,直到最終完全消失。不知道如何解決它。這是我的代碼。在翻轉時更改Alpha;沒有改變鼠標退出?

在瓷磚類:

this.addEventListener(MouseEvent.MOUSE_OVER, thisMouseOver); 
this.addEventListener(MouseEvent.MOUSE_OUT, thisMouseOut); 

public function thisMouseOver(e:Event):void { 
    tileGraphic.bitmapData = setAlpha(tileGraphic.bitmapData); 
} 

public function thisMouseOut(e:Event):void { 
    tileGraphic.bitmapData = resetAlpha(tileGraphic.bitmapData); 
} 

private function setAlpha(bmd:BitmapData):BitmapData { 
    var rec:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height); 
    var ct:ColorTransform = new ColorTransform(); 
    ct.alphaMultiplier = .65; 
    bmd.colorTransform(rec, ct); 
    return bmd; 
} //end function setAlpha 

private function resetAlpha(bmd:BitmapData):BitmapData { 
    var rec:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height); 
    var ct:ColorTransform = new ColorTransform(); 
    ct.alphaMultiplier = 1; 
    bmd.colorTransform(rec, ct); 
    return bmd; 
} //end function resetAlpha 

任何人都可以點我在正確的方向?謝謝!

+0

您是否試過1.54作爲alphaMultiplier進行重置? – codingbuddha 2013-05-07 07:10:34

+0

我試了一下,沒有什麼不同。如果我是正確的,我相信'alphaMultiplier'只能在0到1的範圍內工作。如果你設置它高於1,它會回到1. – Lapys 2013-05-07 07:14:19

+0

Hm ....讓我試試這個:D – codingbuddha 2013-05-07 07:17:57

回答

1

更換resetAlpha與

private function resetAlpha(bmd:BitmapData):BitmapData { 
     var rec:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height); 
     var ct:ColorTransform = new ColorTransform(); 
     ct.alphaOffset = 255 
     bmd.colorTransform(rec, ct); 
     return bmd; 
    } //end function resetAlpha 
+0

工作就像一個魅力!非常感謝! – Lapys 2013-05-07 07:44:38

+0

始終歡迎:) – codingbuddha 2013-05-07 07:45:08

+0

我真的想減去這個,因爲如果基本位圖具有不錯的alpha梯度,這將消除alpha數據。正確的方法是a)保存初始位圖狀態並將Alpha變換應用於Bitmap對象(或包含Sprite),或者b)使用適當的乘法器。阿爾法倍增器**應該在**高於1.0時正常工作,但是OP表明它不......雖然奇怪,但應該受到尊重。 – Vesper 2013-05-07 08:10:54

1

你最好改變容器而不是與BitmapData像素打的阿爾法。例如,在你的情況下,如果你的瓦片位圖最初會有透明像素(在繪製東西之前填入0x00ff0000並且檢查是否如此),那麼它們將變得不透明並帶有codebuddha的答案。因此,將聽衆更改爲以下內容:

public function thisMouseOver(e:Event):void { 
    tileGraphic.alpha=0.65; 
} 

public function thisMouseOut(e:Event):void { 
    tileGraphic.alpha=1; 
} 
+0

非常感謝!也非常有幫助!我沒有想過這樣的事情。 – Lapys 2013-05-07 21:25:24