Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如果没有发生用户交互,请删除MouseEvent.MOUSE\u移动事件侦听器_Actionscript 3_Flash_Event Handling_Mouseevent - Fatal编程技术网

Actionscript 3 如果没有发生用户交互,请删除MouseEvent.MOUSE\u移动事件侦听器

Actionscript 3 如果没有发生用户交互,请删除MouseEvent.MOUSE\u移动事件侦听器,actionscript-3,flash,event-handling,mouseevent,Actionscript 3,Flash,Event Handling,Mouseevent,我是AS3新手,需要帮助了解如何在没有用户交互的情况下删除我的MouseEvent.MOUSE\u MOVElistener 我制作了一个动画,可以执行以下操作: 一条实线和一些文本出现在图像的顶部。完成后,将启用一个鼠标事件,允许用户上下移动该行。当用户停止与线条交互时,线条将消失,并显示动画的最终屏幕 如果用户根本不与动画交互(线从不移动),我需要采用某种方法删除事件侦听器,然后显示动画的最终屏幕。我认为添加一个TimerEvent是做我想做的事情的正确方法,但我不确定如何合并它。这也可能不

我是AS3新手,需要帮助了解如何在没有用户交互的情况下删除我的
MouseEvent.MOUSE\u MOVE
listener

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

如果用户根本不与动画交互(线从不移动),我需要采用某种方法删除事件侦听器,然后显示动画的最终屏幕。我认为添加一个
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} );
}

您可以使用内置的
计时器
类来实现这一点。与setTimeout
函数相比,我更喜欢它,因为它更易于管理

首先创建一个类范围的变量(假设您在FlashIDE中这样做,只需在顶部附近创建它)

然后在
跟随鼠标()中:

上次创建
removeMouseListener()

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

我让
removeMouseListener()
有一个可选参数,这样您就可以随时调用它,而不必考虑计时器


希望有帮助!祝你好运

您是否查看过
setTimeout()
?或者更好的选择是使用计时器对象。您永远不会删除鼠标移动侦听器,而且您创建了太多tweenlite实例。此代码的CPU开销太大,会产生内存泄漏。@BotMaster为什么会产生内存泄漏?每次移动鼠标都会产生4个tweenlite实例或一个错误。@BotMaster不正确。这些是静态函数,它不会创建任何tweenlite实例,cpu使用率可以忽略不计。你肯定会想用定时器来做这个,我可以模拟一些东西并提交一个答案。谢谢你的帮助!您的说明非常清楚,我的动画现在正按照我需要的方式工作。@C.Parcell Done。很抱歉。我是这个网站的新手,没有意识到需要这么做。谢谢你的帮助。
var timeout:Timer;
private function followMouse():void {
    timeout = new Timer( 3000, 1 );
    timeout.addEventListener( TimerEvent.TIMER_COMPLETE, removeMouseListener );
    timeout.start();
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveIt);
}
private function removeMouseListener( e:Event=null ):void {
    timeout.removeEventListener( TimerEvent.TIMER_COMPLETE, removeMouseListener );
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, moveIt);
}
timeout.reset();
timeout.start();