定时器的第一个刻度(忽略毫秒延迟)

时间:2014-05-13 03:18:00

标签: actionscript-3 actionscript timer tween

我有一个功能,其中创建了一系列按钮,快速连续补间一秒到它们的位置,然后触发补间结束的计时器。

我在补间上尝试了延迟/时间设置,并且在没有计时器类的情况下无法获得所需的效果,因为我希望每个新按钮在前一个完成之前开始补间。

我几乎看起来我现在想要使用计时器,但是开始时的延迟仍然是一个问题。是否有一种快速方法可以跳过定时器第一次触发的延迟,或者我是否需要走很长的路径并创建额外的定时器/补间/函数来模拟这种效果?

2 个答案:

答案 0 :(得分:2)

一种解决方案是在没有整个计时器的情况下调用该方法。看一下这个例子:

// Here, we create the timer
var t:Timer = new Timer(200);
t.addEventListener(TimerEvent.TIMER, onTimer);

假设发生了一些事件,比如按下按钮。按下按钮后,游戏中的太空船开始射击,但你想让第一颗子弹立即飞出,而不是等待200毫秒的延迟:

t.start(); // make sure t is a class member, not a local variable
shoot();

这样计时器将启动,但第一个动作将立即发生;)
为了清楚起见,计时器处理程序看起来像这样:

private function onTimer(e:TimerEvent):void 
{
    shoot();
}

如您所见,没有必要将射击的实现直接放入处理函数中,以保持其可重用性和更好的可维护性。

简单地说,您可以在运行时更改计时器的延迟。

这是一个小例子:

// Creating the timer with 2 handlers
var t:Timer = new Timer(200);
t.addEventListener(TimerEvent.TIMER, onTimerSetNewDelay);
t.addEventListener(TimerEvent.TIMER, onTimer);
t.start();

onTimer()的实现并不重要,但onTimerSetNewDelay可能很有趣:

private function onTimerSetNewDelay(e:TimerEvent):void 
{
    t.delay = YOUR_NEW_DELAY_VALUE;
    t.removeEventListener(TimerEvent.TIMER, onTimerSetNewDelay); // removing the listener so it doesn't set the same delay over and over again.
}

答案 1 :(得分:-1)

如何使用onTimer(null);调用函数?