AS3 - 定时器的复位延迟

时间:2015-05-17 11:16:57

标签: actionscript-3 flash timer

我在AS3类中有一个名为Timer的私有_countDownTimer对象。 当实例化类时,我也会使用一些任意延迟

初始化Timer一次
_countDownTimer =new Timer(10000, 1);
_countDownTimer.addEventListener(TimerEvent.TIMER, onCue,false,0,true);

问题是我需要在每次定时器运行时更​​改延迟时间。 因此,在另一种方法中,我首先重新定义私有var _newDelayTime ,然后调用startMyTimer()重新定义延迟并启动_countDownTimer

我的问题是,这应该正常吗?

我是否还需要实例化一个新的_countDownTimer并在每次更改延迟时重新添加监听器?

private function startMyTimer():void{
    _countDownTimer.reset();
    _countDownTimer.stop();
    _countDownTimer.delay=_newDelayTime;
    _countDownTimer.start();
}

private function onCue(e:TimerEvent):void{
    trace('do stuff');
}

2 个答案:

答案 0 :(得分:0)

据我所知,as3 Timer类在计算时间方面并不精确...它取决于监听器函数执行的速度(等待函数完成其工作并继续计数)。我更喜欢使用绿色帆布......但如果你没有那么重要的话,你可以做到这样的事情:(

private function onCue(e:TimerEvent):void
    {
    trace(e.currentTarget.delay);
    _newDelayTime = Math.round(Math.random() * 999) + 1;
    startMyTimer();
    trace('do stuff');
}

你可以用_newDelayTime操作不同......这应该可以正常工作,你不需要重新添加听众

答案 1 :(得分:0)

您不需要(或想要)创建一个全新的计时器对象。

在计时器运行时设置延迟是完全可以接受的。

请注意,设置延迟会根据documentation

重置计时器
  

如果在计时器运行时设置delay间隔,计时器将在相同的repeatCount次迭代中重新启动。

因此,如果计时器实际上不需要停止,则在实例化(并启动它)时取消1重复计数,然后只需在需要时更改延迟。

_countDownTimer.delay=_newDelayTime; //no need to reset/stop/restart