获取计时器已用时间

时间:2012-02-23 11:22:54

标签: actionscript-3 flex timer flash-builder flex4.5

我想知道你是否可以获得自动作脚本定时器启动以来经过的毫秒数。

我想在flex中设置一个简单的标签,其值为定时器触发前的时间(再次)。

这是代码,在'GET ELAPSED TIME',我需要计时器一直运行的时间(因为它上次触发了函数):

var timer = new Timer (10000);
timer.addEventListener(TimerEvent.TIMER, foo);
timer.start();

var numberOfSeconds = timer.delay-timer.'GET ELAPSED TIME';

resetLabel.text = "only "+numberOfSeconds+" until foo fires";

这是否可以让定时器存在时间以及如何调用(google未能回复我)?

2 个答案:

答案 0 :(得分:2)

没有不动产可以获得Timer的剩余时间。解决方法可能是在foo函数中添加一个检查。基本设置看起来像这样:

var realDelay:int = 10000;
var timer:Timer = new Timer (1);
timer.addEventListener(TimerEvent.TIMER, foo);
timer.start();

function foo(e:TimerEvent) : void 
{
    var realCount:int = Math.floor(timer.currentCount/realDelay);
    var timeLeft:Number = (realDelay-timer.currentCount%realDelay);
    resetLabel.text = "Real count: " + realCount + ", milliseconds left: " + timeLeft; 
}

答案 1 :(得分:2)

不幸的是,内置的Timer不支持你想要的东西。这是一个非常简单的包装类,可以像Sam DeHaan的建议一样获得整体持续时间。

package utility
{
    import flash.utils.Timer;
    import flash.utils.getTimer;

    /**
     * DurationTimer
     * Description:
     * Extending Timer class to help show elapsed time
     **/
    public class DurationTimer extends Timer
    {
        private var _startTime:int;
        private var _endTime:int;

        public function DurationTimer( delay:Number, repeatCount:int = 0 )
        {
            super( delay, repeatCount );
        }

        public function get duration():int
        { 
            return ( running ) ? getTimer() - _startTime : _endTime - _startTime;
        }

        override public function start():void
        {
            _startTime = getTimer();
            super.start();
        }

        override public function stop():void
        {
            _endTime = getTimer();
            super.stop();
        }
    }
}