0

我想要做的是运行一次我的监听器函数。问题是,一旦我将鼠标悬停在我的影片剪辑“按钮”上,它就会一次又一次地进入一个新循环。当补间事件完成时,如何让它只运行一次?

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

function Over (e:MouseEvent):void
{
trace('Over');
var myTweenUp:Tween = new Tween(button, "y", Back.easeOut, 200, 180, 2, true);
}

function Out (e:MouseEvent):void
{
trace('Out');
var myTweenDown:Tween = new Tween(button, "y", Back.easeOut, 180, 200, 2, true);
}
button.addEventListener(MouseEvent.MOUSE_OVER, Over);

button.addEventListener(MouseEvent.MOUSE_OUT, Out);
4

3 回答 3

0

如果要运行这两个 MouseEvent,可以添加 removeEventListener 来实现。

function Over (e:MouseEvent):void
{
trace('Over');
var myTweenUp:Tween = new Tween(button, "y", Back.easeOut, 200, 180, 2, true);
button.removeEventListener(MouseEvent.MOUSE_OVER, Over);
}

function Out (e:MouseEvent):void
{
trace('Out');
var myTweenDown:Tween = new Tween(button, "y", Back.easeOut, 180, 200, 2, true);
button.removeEventListener(MouseEvent.MOUSE_OUT, Out);
}

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

如果你想制作一个循环,当鼠标悬停在运行 Over 的按钮上并一个接一个地运行 Out 时,你可以尝试下面的编码:

function Over (e:MouseEvent):void
{
trace('Over');
var myTweenUp:Tween = new Tween(button, "y", Back.easeOut, 200, 180, 2, true);
button.removeEventListener(MouseEvent.MOUSE_OVER, Over);
button.addEventListener(MouseEvent.MOUSE_OUT, Out);
}

function Out (e:MouseEvent):void
{
trace('Out');
var myTweenDown:Tween = new Tween(button, "y", Back.easeOut, 180, 200, 2, true);
button.removeEventListener(MouseEvent.MOUSE_OUT, Out);
button.addEventListener(MouseEvent.MOUSE_OVER, Over);
}

button.addEventListener(MouseEvent.MOUSE_OVER, Over);
于 2012-07-19T04:05:28.623 回答
0

我认为@loxxy的解决方案应该可以解决问题。 首先尝试该解决方案。

如果没有,则在事件触发后尝试删除侦听器。您也可以稍后重新添加它。

例如:

function Over (e:MouseEvent):void
{
    button.removeEventListener(MouseEvent.MOUSE_OVER, Over);
    [...]
}

function Out (e:MouseEvent):void
{
    button.addEventListener(MouseEvent.MOUSE_OVER, Over);
    [...]
}
于 2012-07-18T20:30:51.920 回答
0

上面的代码没有问题。

我认为您正在将代码添加为框架脚本,即在 IDE 中的时间轴框架上。

如果是这种情况,只需stop();在上面的代码片段之前添加。

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

stop();

// ... rest of the code
于 2012-07-18T12:13:23.987 回答