我是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} );
}
您可以使用内置的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()
有一个可选参数,这样你就可以随时调用它,而不必考虑计时器。
希望能有所帮助!祝你好运