[AS3]as3中的Timer最常用的时间事件
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
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例