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

时间:2013-06-20 02:36:18

标签: actionscript-3 flash adobe

我每隔几秒就有一个补间播放,并且它在开始时工作正常,但随后它开始变得紧张并且在它甚至到达补间中途之前重置。 知道为什么吗?第一次运行动画时,计时器似乎也有更长的等待时间

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);

}

1 个答案:

答案 0 :(得分:0)

这是一段很重要的代码;结合基于帧,计时器和补间时间。

目前,每个框架调用move(),它会向您的signalTimer添加一个事件监听器,而不会删除之前添加的事件监听器:

signalTimer.removeEventListener(TimerEvent.TIMER, sendSignal);

但是,每帧添加和删除事件侦听器并不是最佳选择。

如果你真的希望你的计时器每3秒触发一次,在实例化时实例化并添加一个事件监听器(不在move()函数内):

var signalTimer:Timer = new Timer(3000, 0);
signalTimer.addEventListener(TimerEvent.TIMER, sendSignal);
signalTimer.start();

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

解决补间问题,您可以实现基于帧的动画,例如:

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

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