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