[英]AS3 - reset delay on Timer
我在一个名为_countDownTimer
的AS3类中有一个专用的Timer
对象。 当实例化该类时,我也会像这样以一定的延迟初始化一次Timer
_countDownTimer =new Timer(10000, 1);
_countDownTimer.addEventListener(TimerEvent.TIMER, onCue,false,0,true);
问题是每次计时器运行时我都需要更改延迟时间。 因此,在另一种方法中,我首先重新定义一个私有变量_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');
}
据我所知,as3 Timer类在计时方面并不精确……它取决于侦听器函数执行的速度(等到函数完成其工作并继续计数)。 我更喜欢使用绿袜子...但是如果对您来说,拥有准确的时间并不重要,那么可以执行以下操作:
private function onCue(e:TimerEvent):void
{
trace(e.currentTarget.delay);
_newDelayTime = Math.round(Math.random() * 999) + 1;
startMyTimer();
trace('do stuff');
}
您可以使用_newDelayTime
不同的操作...这应该可以正常工作,并且您无需重新添加侦听器
您不需要(或不想)创建一个新的计时器对象。
在计时器运行时设置延迟是完全可以接受的。
不过请注意,根据文档 ,设置延迟会重置计时器:
如果您在计时器运行时设置了
delay
间隔,则计时器将在相同的repeatCount
迭代中重启。
因此,如果实际上不需要停止计时器,请在实例化(并启动)时取消1
重复计数,然后在需要时更改延迟。
_countDownTimer.delay=_newDelayTime; //no need to reset/stop/restart
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.