2012-09-14 101 views
1

我沒有任何成功,獲得背景以鼠標懸停的0.5 alpha顯示,Sprite作爲TextArea的父級。我能得到的最好的結果是出現在MouseOver的0.5透明度上的文本,這完全不是我正在尋找的。無論鼠標狀態如何,我都希望文本處於最大阿爾法值,並且只有背景(Sprite)在MouseOver上以半透明度顯示。如果可能,我寧願避免補間。這是我的代碼:As3鼠標懸停後臺無法按預期方式工作

var textSprite:Sprite = new Sprite(); 

    public function Main() 
    { 
     textSprite.graphics.beginFill(0x000000, 0); 
     textSprite.graphics.drawRect(94.95, 80.95, 390, 130); 
     textSprite.graphics.endFill(); 
     textSprite.addChild(picArea1);//textarea added on stage, same dimensions, transparent background 
     textSprite.buttonMode = true; 
     textSprite.useHandCursor = true; 
     stage.addChild(textSprite); 


     textSprite.addEventListener(MouseEvent.MOUSE_OVER, applyAlpha); 
     textSprite.addEventListener(MouseEvent.MOUSE_OUT, noApplyAlpha); 
    } 

    function applyAlpha(event:MouseEvent):void { 
     textSprite.alpha = 0.5; 
    } 

    function noApplyAlpha(event:MouseEvent):void { 
     textSprite.alpha = 0; 
    } 

回答

0

設置精靈的alpha還會影響它的所有孩子(按設計),這是你當前的問題。

你現在正在做這件事的方式(用圖形對象繪製背景),你必須重畫鼠標上/下的精靈圖形。

這裏是方法,你可以使用:

public function Main() 
{ 
    drawTextBG(); //a new function I made to avoid duplicating code 
    textSprite.addChild(picArea1);//textarea added on stage, same dimensions, transparent background 
    textSprite.buttonMode = true; 
    textSprite.useHandCursor = true; 
    stage.addChild(textSprite); 


    textSprite.addEventListener(MouseEvent.MOUSE_OVER, applyAlpha); 
    textSprite.addEventListener(MouseEvent.MOUSE_OUT, noApplyAlpha); 
} 

//new function I made, this draws the background and makes the transparency the value passed in. I set the default to 1 (totally visible) 
function drawTextBG(bgAlpha:Number = 1):void { 
    textSprite.graphics.clear(); 
    textSprite.graphics.beginFill(0x000000, bgAlpha); 
    textSprite.graphics.drawRect(94.95, 80.95, 390, 130); 
    textSprite.graphics.endFill(); 
} 

function applyAlpha(event:MouseEvent):void { 
    drawTextBG(.5); //redraw the background with half (.5) alpha 
} 

function noApplyAlpha(event:MouseEvent):void { 
    drawTextBG(); //redraw the background with the default value (1 - totaly visible) 
} 

現在,如果你使用TLF(文本佈局框架)文本字段,你可以只使用文本字段的backgroundColor和backgroundAlpha屬性和放棄繪畫手動背景。

+0

@John雖然這是真的,但最好在textSprite的TextField下添加另一個sprite,並將其更改爲alpha。 – Gio

+0

我不認爲它真的很重要。從性能角度來看,這實際上是「更好」,無論如何。也就是說,如果這是我自己的項目,我可能會將它作爲下面的一個不同的精靈,讓它接收鼠標事件而不是textField或父項。但問題不在於...... – BadFeelingAboutThis

+0

作爲一個常常用ActionScript搞笑的人,我不知道你們在談論什麼。這工作正常,但@LondonDrugs_MediaServices。謝謝! –

相關問題