我在AS3类中有一个名为Timer
的私有_countDownTimer
对象。
当实例化类时,我也会使用一些任意延迟
_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');
}
答案 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