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

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

热门文章推荐

请稍候...

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

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