[AS3]as3.0基于系统时间的时间管理器Ticker类(3)
为了使用方便,不用写太多没必要的代码,于是写了一些静态方法,TimeTicker: //实用的静态方法 publicstaticvar sTickerId:int = 0 ; publicstaticvar sTickerMap:Dictionary = new Dictionary(); /** *设置一个指
为了使用方便,不用写太多没必要的代码,于是写了一些静态方法,TimeTicker:
- //实用的静态方法
- public static var sTickerId:int = 0;
- public static var sTickerMap:Dictionary = new Dictionary();
- /**
- * 设置一个指定时间后回调的定时器
- *
- * @param delay:延迟时间
- * @param callback:回调
- */
- public static function setTimeout(delay:Number, callback:Function):int
- {
- var ticker:TimeTicker = new TimeTicker(delay, 1, null, onTimeout);
- ticker.start();
- var id:int = ++sTickerId % int.MAX_VALUE;
- sTickerMap[id] = ticker;
- return id;
- function onTimeout():void
- {
- clearTimeout(id);
- callback();
- }
- }
- /**
- * 移除一个定时器
- *
- * @param id:由setTimeout返回的id
- */
- public static function clearTimeout(id:int):void
- {
- if (id == 0)
- {
- return;
- }
- var ticker:TimeTicker = sTickerMap[id];
- if (ticker)
- {
- ticker.dispose();
- delete sTickerMap[id];
- }
- }
- /**
- * 设置一个定时器,间隔delay执行一次
- *
- * @param delay:间隔时间
- * @param callback:回调
- * @param immediately:是否立即回调一次
- *
- */
- public static function setInterval(delay:Number, callback:Function):int
- {
- var ticker:TimeTicker = new TimeTicker(delay, 0, callback);
- ticker.start();
- var id:int = ++sTickerId % int.MAX_VALUE;
- sTickerMap[id] = ticker;
- return id;
- }
- /**
- * 移除一个定时器
- *
- * @param id:由setInterval返回的id
- */
- public static function clearInterval(id:int):void
- {
- if (id == 0)
- {
- return;
- }
- var ticker:TimeTicker = sTickerMap[id];
- if (ticker)
- {
- ticker.dispose();
- delete sTickerMap[id];
- }
- }
- /**
- * 设置一个指定次数的定时器
- *
- * @param delay:间隔时间
- * @param repeatCount:次数
- * @param callback:回调
- * @param complete:完成后的回调
- */
- public static function setTicker(delay:Number, repeatCount:int, callback:Function, compFunc:Function = null):int
- {
- var ticker:TimeTicker = new TimeTicker(delay, repeatCount, callback, onComplete);
- ticker.start();
- var id:int = ++sTickerId % int.MAX_VALUE;
- sTickerMap[id] = ticker;
- return id;
- function onComplete():void
- {
- if (compFunc != null)
- {
- compFunc();
- }
- clearTicker(id);
- }
- }
- /**
- * 移除一个定时器
- *
- * @param id:由setTicker返回的id
- */
- public static function clearTicker(id:int):void
- {
- if (id == 0)
- {
- return;
- }
- var ticker:TimeTicker = sTickerMap[id];
- if (ticker)
- {
- ticker.dispose();
- delete sTickerMap[id];
- }
- }
- /**
- * 重置定时器
- * @param id
- *
- */
- public static function resetTimer(id:int):void
- {
- if (id == 0)
- {
- return;
- }
- var ticker:TimeTicker = sTickerMap[id];
- if (ticker)
- {
- ticker.reset();
- }
- }
- /**
- * 重置一个定时器的延时
- *
- * @param id:ID
- * @param delay:新时间
- */
- public static function resetTime(id:int, delay_:int):void
- {
- if (id == 0)
- {
- return;
- }
- var ticker:TimeTicker = sTickerMap[id];
- if (ticker)
- {
- ticker.delay = delay_;
- }
- }
- FrameTicker:
- //实用的静态方法
- public static var sTickerId:int = 0;
- public static var sTickerMap:Dictionary = new Dictionary();
- /**
- * 设置一个以帧率计算的回调
- *
- * @param callback:回调
- * @param frequency:频率
- */
- public static function setInterval(callback:Function, frequency:int = 1):int
- {
- var ticker:FrameTicker = new FrameTicker(frequency, 0, callback);
- ticker.start();
- var id:int = ++sTickerId % int.MAX_VALUE;
- sTickerMap[id] = ticker;
- return id;
- }
- /**
- * 清除回调
- */
- public static function clearInterval(id:int):void
- {
- if (id == 0)
- {
- return;
- }
- var ticker:FrameTicker = sTickerMap[id];
- if (ticker)
- {
- ticker.dispose();
- delete sTickerMap[id];
- }
- }
我正在做的项目中目前做到的时间的帧方面的管理就是使用这种方式,应付1000个以下的定时器是没有太大问题的,当然如果一个游戏到了需要这么多定时器的时候,我觉得就应该优化了。
热门文章推荐
- [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示例
请稍候...