如果没有发生用户交互,请删除MouseEvent.MOUSE_MOVE事件侦听器

时间:2014-10-27 16:47:48

标签: actionscript-3 flash event-handling mouseevent

我是AS3的新手,如果没有用户互动,需要帮助找出如何删除MouseEvent.MOUSE_MOVE侦听器。

我制作了一个动画,可以执行以下操作: 实线和一些文本显示在图像的顶部。完成此操作后,将启用鼠标事件,允许用户上下移动线。当用户停止与该线交互时,该线消失并显示动画的最终屏幕。

如果用户根本没有与动画交互(线条永远不会移动),我需要采用某种方式来移除事件监听器,然后显示动画的最终屏幕。我认为添加TimerEvent是做我想要的正确方法,但我不确定如何合并它。这也可能不是最好或最正确的方法。在这种情况下,是否有人有关于应该做什么的建议?

任何帮助将不胜感激!

这是我的代码:

import com.greensock.*;

//objects on the stage
line_mc.y=250;
raisingTxt.alpha=0;
arrow_mc.alpha=0;
final_mc.alpha=0;
logo_mc.alpha=1 ;


//move line mc to y:125
TweenLite.to(line_mc, 1, {y:125});
TweenLite.to(raisingTxt, .5, {alpha:1, delay:1.2});
TweenLite.to(arrow_mc, .5, {alpha:1, delay:1.2, onComplete:followMouse});


//calls MouseEvent onComplete of tween
function followMouse() {
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveIt);
}

function moveIt(e:MouseEvent):void {
    TweenLite.to(line_mc, 0.5, {y:this.mouseY});
    TweenLite.to([raisingTxt,arrow_mc], 0.5, {alpha:0, onComplete:finalScreen} );
}

//calls final screen onComplete of MouseEvent
function finalScreen() {
    TweenLite.to(line_mc, 0.5, {alpha:0} );
    TweenLite.to(final_mc, 0.5, {alpha:1} );
}

1 个答案:

答案 0 :(得分:1)

您可以使用内置的Timer类完成此操作。我比setTimeout function更喜欢它,因为它管理起来比较简单。

首先创建一个类宽变量(假设您在Flash IDE中执行此操作,只需在顶部附近创建它)

var timeout:Timer;

然后在followMouse()

private function followMouse():void {
    timeout = new Timer( 3000, 1 );
    timeout.addEventListener( TimerEvent.TIMER_COMPLETE, removeMouseListener );
    timeout.start();
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveIt);
}

最后创建removeMouseListener()

private function removeMouseListener( e:Event=null ):void {
    timeout.removeEventListener( TimerEvent.TIMER_COMPLETE, removeMouseListener );
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, moveIt);
}

如果您想在每次鼠标移动时继续重置计时器,可以将这两行添加到moveIt()

timeout.reset();
timeout.start();

我让removeMouseListener()有一个可选参数,因此无论计时器如何,您都可以随时调用它。

希望有所帮助!祝你好运!