我没有取得任何成功,在鼠标悬停时获得0.5 alpha的背景,Sprite作为TextArea的父级。我能得到的最好的是在MouseOver上以0.5透明度出现的文字,这完全不是我想要的。无论鼠标状态如何,我希望文本处于最大alpha状态,并且只有背景(Sprite)在MouseOver上以半透明度显示。如果可能的话,我宁愿避免补间。这是我的代码:
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 :(得分:0)
设置精灵的alpha也会影响它的所有子项(按设计),这是你当前的问题。
你当前正在这样做的方式(用图形对象绘制背景),你必须重新绘制鼠标上的sprite图形。
以下是您可以使用的方法:
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属性,并手动绘制背景。