Actionscript 3 计时器在几秒钟后停止正常工作

Actionscript 3 计时器在几秒钟后停止正常工作,actionscript-3,flash,adobe,Actionscript 3,Flash,Adobe,我每隔几秒钟就要玩一次tween游戏,开始时效果很好,但在玩到一半之前,它就开始变得紧张和重置。 知道为什么吗?在我第一次运行动画时,计时器的等待时间似乎也更长 import flash.events.Event; import fl.transitions.Tween; import fl.transitions.easing.*; import flash.utils.Timer; import flash.events.TimerEvent; addEventListener(Event

我每隔几秒钟就要玩一次tween游戏,开始时效果很好,但在玩到一半之前,它就开始变得紧张和重置。 知道为什么吗?在我第一次运行动画时,计时器的等待时间似乎也更长

import flash.events.Event;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.utils.Timer;
import flash.events.TimerEvent;

addEventListener(Event.ENTER_FRAME, move);

    var signalTimer:Timer = new Timer(3000, 0);

function move(e:Event){
    sender.x = mouseX;
    sender.y = mouseY;  

    signalTimer.addEventListener(TimerEvent.TIMER, sendSignal);
    signalTimer.start();
}

function sendSignal(e:TimerEvent){
    signalTimer.stop();
    var sigTween1X:Tween = new Tween(signal1, "x", None.easeOut, sender.x, mic1.x, 10, false);
    var sigTween1Y:Tween = new Tween(signal1, "y", None.easeIn, sender.y, mic1.y, 15, false);

    var sigTween3X:Tween = new Tween(signal3, "x", Strong.easeIn, sender.x, mic3.x, 7, true);
    var sigTween3Y:Tween = new Tween(signal3, "y", Strong.easeOut, sender.y, mic3.y, 7, true);

}

这是一段繁重的代码;结合基于帧、计时器和时间间隔的计时

当前,每个帧调用
move()
,这将向
signalTimer
添加一个事件侦听器,而不删除先前添加的事件侦听器:

signalTimer.removeEventListener(TimerEvent.TIMER, sendSignal);
但是,在每帧中添加和删除事件侦听器并不是最佳选择

如果确实希望计时器每3秒触发一次,请实例化并在实例化时添加事件侦听器(不在
move()
函数中):

然后不要停止
sendSignal()
中的计时器

解决这两个问题,可以实现基于帧的动画,例如:

signal1.x -= (signal1.x - mic1.x) * 0.9;
signal1.y -= (signal1.y - mic1.y) * 0.9;

因此,实现一个基于delta的函数来跟踪x,y坐标。

我猜这是一个累积效应:ENTER\u FRAME处理程序触发,这将向signalTimer添加另一个事件侦听器并启动它。然后,当计时器关闭时,它会调用所有的事件处理程序来处理它的计时器事件,该事件会运行所有的tweens。@mitim这就是我所想的,但是有没有办法只添加一次侦听器?似乎即使我将计时器事件侦听器放在move函数之外,每次加载帧时它仍然会被调用,所以我所做的就是放置
signalTimer.removeEventListener(TimerEvent.TIMER,sendSignal)以使其工作。我做错什么了吗?这帧脚本在时间线上重复了吗?如果它位于
move()
函数范围之外,则只应调用一次。它会不断被调用,因此我认为它会在时间线上重复。如何使其不重复?添加
stop()到该帧上的操作”。可能会添加一个
跟踪(“调用”)语句,并检查控制台输出,以查看帧是否被重复调用。我添加了跟踪,它被多次输出
signal1.x -= (signal1.x - mic1.x) * 0.9;
signal1.y -= (signal1.y - mic1.y) * 0.9;