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

[AS3]as3.0基于系统时间的时间管理器Ticker类(3)

时间:2015-09-13 22:18酷播
为了使用方便,不用写太多没必要的代码,于是写了一些静态方法,TimeTicker: //实用的静态方法 publicstaticvar sTickerId:int = 0 ; publicstaticvar sTickerMap:Dictionary = new Dictionary(); /** *设置一个指

为了使用方便,不用写太多没必要的代码,于是写了一些静态方法,TimeTicker:

  1. //实用的静态方法 
  2. public static var sTickerId:int = 0; 
  3. public static var sTickerMap:Dictionary = new Dictionary(); 
  4.   
  5. /** 
  6.  * 设置一个指定时间后回调的定时器 
  7.  * 
  8.  * @param delay:延迟时间 
  9.  * @param callback:回调 
  10.  */ 
  11. public static function setTimeout(delay:Number, callback:Function):int 
  12. { 
  13.     var ticker:TimeTicker = new TimeTicker(delay, 1, null, onTimeout); 
  14.     ticker.start(); 
  15.       
  16.     var id:int = ++sTickerId % int.MAX_VALUE; 
  17.     sTickerMap[id] = ticker; 
  18.     return id; 
  19.       
  20.     function onTimeout():void 
  21.     { 
  22.         clearTimeout(id); 
  23.         callback(); 
  24.     } 
  25. } 
  26.   
  27. /** 
  28.  * 移除一个定时器 
  29.  * 
  30.  * @param id:由setTimeout返回的id 
  31.  */ 
  32. public static function clearTimeout(id:int):void 
  33. { 
  34.     if (id == 0) 
  35.     { 
  36.         return; 
  37.     } 
  38.     var ticker:TimeTicker = sTickerMap[id]; 
  39.     if (ticker) 
  40.     { 
  41.         ticker.dispose(); 
  42.         delete sTickerMap[id]; 
  43.     } 
  44. } 
  45.   
  46. /** 
  47.  * 设置一个定时器,间隔delay执行一次 
  48.  * 
  49.  * @param delay:间隔时间 
  50.  * @param callback:回调 
  51.  * @param immediately:是否立即回调一次 
  52.  * 
  53.  */ 
  54. public static function setInterval(delay:Number, callback:Function):int 
  55. { 
  56.     var ticker:TimeTicker = new TimeTicker(delay, 0, callback); 
  57.     ticker.start(); 
  58.       
  59.     var id:int = ++sTickerId % int.MAX_VALUE; 
  60.     sTickerMap[id] = ticker; 
  61.     return id; 
  62. } 
  63.   
  64. /** 
  65.  * 移除一个定时器 
  66.  * 
  67.  * @param id:由setInterval返回的id 
  68.  */ 
  69. public static function clearInterval(id:int):void 
  70. { 
  71.     if (id == 0) 
  72.     { 
  73.         return; 
  74.     } 
  75.     var ticker:TimeTicker = sTickerMap[id]; 
  76.     if (ticker) 
  77.     { 
  78.         ticker.dispose(); 
  79.         delete sTickerMap[id]; 
  80.     } 
  81. } 
  82.   
  83. /** 
  84.  * 设置一个指定次数的定时器 
  85.  * 
  86.  * @param delay:间隔时间 
  87.  * @param repeatCount:次数 
  88.  * @param callback:回调 
  89.  * @param complete:完成后的回调 
  90.  */ 
  91. public static function setTicker(delay:Number, repeatCount:int, callback:Function, compFunc:Function = null):int 
  92. { 
  93.     var ticker:TimeTicker = new TimeTicker(delay, repeatCount, callback, onComplete); 
  94.     ticker.start(); 
  95.       
  96.     var id:int = ++sTickerId % int.MAX_VALUE; 
  97.     sTickerMap[id] = ticker; 
  98.     return id; 
  99.       
  100.     function onComplete():void 
  101.     { 
  102.         if (compFunc != null) 
  103.         { 
  104.             compFunc(); 
  105.         } 
  106.         clearTicker(id); 
  107.     } 
  108. } 
  109.   
  110. /** 
  111.  * 移除一个定时器 
  112.  * 
  113.  * @param id:由setTicker返回的id 
  114.  */ 
  115. public static function clearTicker(id:int):void 
  116. { 
  117.     if (id == 0) 
  118.     { 
  119.         return; 
  120.     } 
  121.     var ticker:TimeTicker = sTickerMap[id]; 
  122.     if (ticker) 
  123.     { 
  124.         ticker.dispose(); 
  125.         delete sTickerMap[id]; 
  126.     } 
  127. } 
  128.   
  129. /** 
  130.  * 重置定时器 
  131.  * @param id 
  132.  * 
  133.  */     
  134. public static function resetTimer(id:int):void 
  135. { 
  136.     if (id == 0) 
  137.     { 
  138.         return; 
  139.     } 
  140.     var ticker:TimeTicker = sTickerMap[id]; 
  141.     if (ticker) 
  142.     { 
  143.         ticker.reset(); 
  144.     } 
  145. } 
  146.   
  147. /** 
  148.  * 重置一个定时器的延时 
  149.  * 
  150.  * @param id:ID 
  151.  * @param delay:新时间 
  152.  */ 
  153. public static function resetTime(id:int, delay_:int):void 
  154. { 
  155.     if (id == 0) 
  156.     { 
  157.         return; 
  158.     } 
  159.     var ticker:TimeTicker = sTickerMap[id]; 
  160.     if (ticker) 
  161.     { 
  162.         ticker.delay = delay_; 
  163.     } 
  164. } 
  165.  
  166. FrameTicker: 
  167. //实用的静态方法 
  168. public static var sTickerId:int = 0; 
  169. public static var sTickerMap:Dictionary = new Dictionary(); 
  170.   
  171. /** 
  172.  * 设置一个以帧率计算的回调 
  173.  * 
  174.  * @param callback:回调 
  175.  * @param frequency:频率 
  176.  */ 
  177. public static function setInterval(callback:Function, frequency:int = 1):int 
  178. { 
  179.     var ticker:FrameTicker = new FrameTicker(frequency, 0, callback); 
  180.     ticker.start(); 
  181.       
  182.     var id:int = ++sTickerId % int.MAX_VALUE; 
  183.     sTickerMap[id] = ticker; 
  184.     return id; 
  185. } 
  186.   
  187. /** 
  188.  * 清除回调 
  189.  */ 
  190. public static function clearInterval(id:int):void 
  191. { 
  192.     if (id == 0) 
  193.     { 
  194.         return; 
  195.     } 
  196.       
  197.     var ticker:FrameTicker = sTickerMap[id]; 
  198.     if (ticker) 
  199.     { 
  200.         ticker.dispose(); 
  201.         delete sTickerMap[id]; 
  202.     } 
  203. } 

我正在做的项目中目前做到的时间的帧方面的管理就是使用这种方式,应付1000个以下的定时器是没有太大问题的,当然如果一个游戏到了需要这么多定时器的时候,我觉得就应该优化了。

热门文章推荐

请稍候...

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

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