0

我正在尝试在 Flash 应用程序中制作自己的按钮。这是一些代码:

addEventListener(MouseEvent.MOUSE_OUT, Out);
addEventListener(MouseEvent.MOUSE_OVER, Over);

...

private function Over(event:MouseEvent):void
{
    addChild(overImage);
}

private function Out(event:MouseEvent):void
{
    removeChild(overImage);
}

当鼠标悬停在此按钮上时,overImage 会闪烁。看起来OverOut正在调用每一帧。我究竟做错了什么?

4

4 回答 4

3

如果鼠标位于overImage将出现的点,则该子对象将在其自身上引发MOUSE_OVER事件,从而MOUSE_OUT在其父对象上引发事件。父级MOUSE_OUT将从显示列表中删除 ,overImage这将再次导致MOUSE_OVER父级超出,再次启动循环并使overImage闪烁。

于 2012-12-21T03:46:14.990 回答
1

就像其他人说的那样,改用 ROLL_OVER 和 ROLL_OUT,或者设置 button.mouseChildren = false。

它闪烁的原因是因为 MOUSE_OVER 和 MOUSE_OUT 将用于该按钮的每个孩子。因此,如果您有文本、背景图像/颜色、光泽或其中的其他元素,则每次滚动其中任何部分时,它都会触发。

因此,当您添加“overImage”时,它会出现在鼠标下方,并触发另一个 mouseOut 和 mouseOver。同样,只需使用 ROLL_OVER 和 ROLL_OUT,或设置 mouseChildren = false

于 2012-12-21T07:41:44.450 回答
1

既然你用 Flex 标记了这个;为什么不使用Flex 按钮

MouseOver 事件将随着鼠标移动而连续触发。我会在调用 addChild 之前执行检查,以查看 overImage 是否已经成为父对象:

private function Over(event:MouseEvent):void
{
   if(!overImage.parent){
    addChild(overImage); 
   }
}

private function Out(event:MouseEvent):void
{
    if(overImage.parent){
     removeChild(overImage);
    }
}

我怀疑这会阻止“闪烁”。

于 2012-12-21T03:47:38.003 回答
0

只需考虑使用MouseEvent.ROLL_OVERMouseEvent.ROLL_OUT事件。他们忽略组件的孩子。没有任何额外的检查和丑陋的技巧。

顺便说一句,按钮支持皮肤和状态,因此您可以将图像包含在“结束”状态中。

于 2012-12-21T07:05:38.940 回答