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

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

时间:2015-09-13 22:18酷播
这里没有实现,是因为我写了两种定时器,一种是基于时间的定时器,一种是基于帧频的定时器。 下面分别是两种定时器的代码: packageorg.easily.ticker { importflash.utils.Dictionary; /** *@authorEasily */ publ

这里没有实现,是因为我写了两种定时器,一种是基于时间的定时器,一种是基于帧频的定时器。

下面分别是两种定时器的代码:

  1. package org.easily.ticker 
  2.     import flash.utils.Dictionary; 
  3.       
  4.     /** 
  5.      * @author Easily 
  6.      */ 
  7.     public class TimeTicker extends Ticker 
  8.     { 
  9.         public var delay:Number; 
  10.         public var repeatCount:int; 
  11.         public var tickTime:Number; 
  12.         public var tickCount:int; 
  13.           
  14.         public function TimeTicker(delay_:Number, repeatCount_:int = 0timerFunc_:Function = nullcompFunc_:Function = null
  15.         { 
  16.             super(timerFunc_, compFunc_); 
  17.             delay = Math.abs(delay_); 
  18.             repeatCount = Math.max(0, repeatCount_); 
  19.               
  20.             reset(); 
  21.         } 
  22.           
  23.         override public function reset():void 
  24.         { 
  25.             tickCount = 0
  26.             tickTime = 0
  27.         } 
  28.   
  29.         override public function doTick(dtime:Number):void 
  30.         { 
  31.             tickTime += dtime; 
  32.             while (tickTime >= delay) 
  33.             { 
  34.                 tickTime -delay
  35.                 ++tickCount; 
  36.                 if (timerFunc != null) 
  37.                 { 
  38.                     timerFunc(); 
  39.                 } 
  40.                 if (repeatCount > 0 && tickCount >= repeatCount) 
  41.                 { 
  42.                     if (compFunc != null) 
  43.                     { 
  44.                         compFunc(); 
  45.                     } 
  46.                     dispose(); 
  47.                     return; 
  48.                 } 
  49.             } 
  50.         } 
  51.     } 

 

  1. package org.easily.ticker 
  2.     import flash.utils.Dictionary; 
  3.       
  4.     /** 
  5.      * @author Easily 
  6.      */ 
  7.     public class FrameTicker extends Ticker 
  8.     { 
  9.         public var totalCount:int; 
  10.         public var tickCount:int; 
  11.         public var frequency:int; 
  12.         public var repeatCount:int; 
  13.           
  14.         public function FrameTicker(frequency_:int = 1repeatCount_:int = 0timerFunc_:Function = nullcompFunc_:Function = null
  15.         { 
  16.             super(timerFunc_, compFunc_); 
  17.             frequency = Math.max(1, frequency_); 
  18.             repeatCount = Math.max(0, repeatCount_); 
  19.               
  20.             reset(); 
  21.         } 
  22.           
  23.         override public function reset():void 
  24.         { 
  25.             tickCount = 0
  26.         } 
  27.   
  28.         override public function doTick(dtime:Number):void 
  29.         { 
  30.             ++tickCount; 
  31.               
  32.             if (tickCount == frequency) 
  33.             { 
  34.                 tickCount = 0
  35.                 ++totalCount; 
  36.                 if (timerFunc != null) 
  37.                 { 
  38.                     timerFunc(dtime); 
  39.                 } 
  40.                 if (repeatCount > 0 && totalCount >= repeatCount) 
  41.                 { 
  42.                     if (compFunc != null) 
  43.                     { 
  44.                         compFunc(); 
  45.                     } 
  46.                     dispose(); 
  47.                 } 
  48.             } 
  49.         } 
  50.     } 

 有了两种定时器,应该需要一个管理器才方便,于是有了一个 TickerManager:

  1. package org.easily.ticker 
  2.     import org.easily.utils.ArrayUtils; 
  3.       
  4.     /** 
  5.      * @author Easily 
  6.      */ 
  7.     public class TickerManager 
  8.     { 
  9.         public static var sInstance:TickerManager = new TickerManager(); 
  10.           
  11.         public static function getInstance():TickerManager 
  12.         { 
  13.             return sInstance; 
  14.         } 
  15.           
  16.         public var tickerList:Array = []; 
  17.           
  18.         public function TickerManager() 
  19.         { 
  20.             if (sInstance) 
  21.             { 
  22.                 throw new Error("TickerManager Singleton already constructed!"); 
  23.             } 
  24.         } 
  25.           
  26.         public function get length():int 
  27.         { 
  28.             return tickerList.length; 
  29.         } 
  30.           
  31.         public function doTick(dtime:Number):void 
  32.         { 
  33.             for each (var ticker:Ticker in ArrayUtils.clone(tickerList)) 
  34.             { 
  35.                 ticker.doTick(dtime); 
  36.             } 
  37.         } 
  38.           
  39.         public function addTicker(ticker:Ticker):void 
  40.         { 
  41.             ArrayUtils.push(tickerList, ticker); 
  42.         } 
  43.           
  44.         public function removeTicker(ticker:Ticker):void 
  45.         { 
  46.             ArrayUtils.remove(tickerList, ticker); 
  47.         } 
  48.     } 

热门文章推荐

请稍候...

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

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