我在一个名为_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');
}

===============>>#1 票数: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不同的操作...这应该可以正常工作,并且您无需重新添加侦听器

===============>>#2 票数:0 已采纳

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

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

不过请注意,根据文档 ,设置延迟会重置计时器:

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

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

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

  ask by Bachalo translate from so

未解决问题?本站智能推荐: