·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3中的Timer最常用的时间事件

时间:2016-10-20 14:57寂寞风之谷
AS3.0完全兼容了AS2.0的时间函数,所以用习惯了AS2.0的朋友不用担心会不习惯。这些时间函数包括

    AS3.0完全兼容了AS2.0的时间函数,所以用习惯了AS2.0的朋友不用担心会不习惯。这些时间函数包括:

    1. setInterval 和 clearInterval

    这两个不用我介绍的吧?呵呵

    2. setTimeout 和 clearTimeout

    这个不知道你用过没?很实用的一个功能,但不知道为什么没有出现在AS2.0的帮助文档中。在AS2.0中是实实在在存在的,功能是只执行一次时间函数。

    3. getTimer

    这个也应该家喻户晓的。

 

    下面我想介绍下AS3.0新推出的控制时间的类,就是Timer类(flash.utils.Timer)

    这个类的应用还是比较简单的,我们看下面一段代码:

    var t:Timer = new Timer(1000, 5); //定义一个间隔1000毫秒,运行5次的Timer。如果没有参数5就是无限次调用直到运行stop()方法;

    function onTick(event:TimerEvent) {

        if (event.target.currentCount == 3) t.stop();

        trace("onTick");

    }

    t.addEventListener(TimerEvent.TIMER, onTick); //每隔1000毫秒调用一次

    function onFinish(event:TimerEvent) {

        trace("onFinish");

    }

    t.addEventListener(TimerEvent.TIMER_COMPLETE, onFinish); //运行结束后调用

    t.start(); //开始计时

    结构相对还是比较清楚的,我这里做几点说明:

    1. Timer类的事件只有这两种TIMER和TIMER_COMPLETE(继承的不算,下同)

    2. 在函数体内,要调用Timer类的方法或属性,需要用event.target(指向Timer实例),而不像其他事件直接用event就可以,这个是有区别的(参见本例onTick函数体)。

 

    下面讨论个新手不需要理会的问题:

    AS3.0为什么不推荐沿用原来的时间机制,而采用Timer类来实现时间间隔?Timer类的优势是什么?

    这个问题有点难回答,本人经过多次测试,从运行效率上并没有发现Timer类有任何优势。方便性上也没发现有什么划时代进步,传参反而还麻烦了些。那么Timer类的优势到底是什么呢?我得出的结论是:毫无优势...再囧一个...

    但我们从代码的习惯性上面来比较:

    1. setInterval

    如果执行了setInterval,而没有执行clearInterval,那么该侦听器对象永远不会被回收。但是这个错误一般不会犯,因为不终止的话,setInterval会一直执行下去。

    2. setTimeout

    如果执行了setTimeout,而没有执行clearTimeout,那么该侦听器对象永远不会被回收!

    这个才是致命伤!因为setTimeout只执行一次时间函数,很少有人会专门写clearTimeout语句的。事实上,本人没做研究之前,一直以为clearTimeout只是为了提前终止setTimeout用的,根本不知道只有这样才能回收侦听器。那么如果在一个应用程序中大量使用setTimeout而不清理,倒确实会对性能产生影响。

    3. Timer

    Timer类再两种情况下会正常回收侦听器:

    (1) 定义一个有限执行次数的Timer,执行次数到了之后正常回收

    (2) 使用Timer.stop();方法,立即回收侦听器。

    所以,我只能理解为,Timer的优势是比较容易养成良好的回收侦听器习惯...

本文出自 “寂寞风之谷” 博客,请务必保留此出处http://windtoto.blog.51cto.com/1986737/375665

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器