[AS3]as3.0基于系统时间的时间管理器Ticker类(2)
这里没有实现,是因为我写了两种定时器,一种是基于时间的定时器,一种是基于帧频的定时器。 下面分别是两种定时器的代码: packageorg.easily.ticker { importflash.utils.Dictionary; /** *@authorEasily */ publ
这里没有实现,是因为我写了两种定时器,一种是基于时间的定时器,一种是基于帧频的定时器。
下面分别是两种定时器的代码:
- package org.easily.ticker
- {
- import flash.utils.Dictionary;
- /**
- * @author Easily
- */
- public class TimeTicker extends Ticker
- {
- public var delay:Number;
- public var repeatCount:int;
- public var tickTime:Number;
- public var tickCount:int;
- public function TimeTicker(delay_:Number, repeatCount_:int = 0, timerFunc_:Function = null, compFunc_:Function = null)
- {
- super(timerFunc_, compFunc_);
- delay = Math.abs(delay_);
- repeatCount = Math.max(0, repeatCount_);
- reset();
- }
- override public function reset():void
- {
- tickCount = 0;
- tickTime = 0;
- }
- override public function doTick(dtime:Number):void
- {
- tickTime += dtime;
- while (tickTime >= delay)
- {
- tickTime -= delay;
- ++tickCount;
- if (timerFunc != null)
- {
- timerFunc();
- }
- if (repeatCount > 0 && tickCount >= repeatCount)
- {
- if (compFunc != null)
- {
- compFunc();
- }
- dispose();
- return;
- }
- }
- }
- }
- }
- package org.easily.ticker
- {
- import flash.utils.Dictionary;
- /**
- * @author Easily
- */
- public class FrameTicker extends Ticker
- {
- public var totalCount:int;
- public var tickCount:int;
- public var frequency:int;
- public var repeatCount:int;
- public function FrameTicker(frequency_:int = 1, repeatCount_:int = 0, timerFunc_:Function = null, compFunc_:Function = null)
- {
- super(timerFunc_, compFunc_);
- frequency = Math.max(1, frequency_);
- repeatCount = Math.max(0, repeatCount_);
- reset();
- }
- override public function reset():void
- {
- tickCount = 0;
- }
- override public function doTick(dtime:Number):void
- {
- ++tickCount;
- if (tickCount == frequency)
- {
- tickCount = 0;
- ++totalCount;
- if (timerFunc != null)
- {
- timerFunc(dtime);
- }
- if (repeatCount > 0 && totalCount >= repeatCount)
- {
- if (compFunc != null)
- {
- compFunc();
- }
- dispose();
- }
- }
- }
- }
- }
有了两种定时器,应该需要一个管理器才方便,于是有了一个 TickerManager:
- package org.easily.ticker
- {
- import org.easily.utils.ArrayUtils;
- /**
- * @author Easily
- */
- public class TickerManager
- {
- public static var sInstance:TickerManager = new TickerManager();
- public static function getInstance():TickerManager
- {
- return sInstance;
- }
- public var tickerList:Array = [];
- public function TickerManager()
- {
- if (sInstance)
- {
- throw new Error("TickerManager Singleton already constructed!");
- }
- }
- public function get length():int
- {
- return tickerList.length;
- }
- public function doTick(dtime:Number):void
- {
- for each (var ticker:Ticker in ArrayUtils.clone(tickerList))
- {
- ticker.doTick(dtime);
- }
- }
- public function addTicker(ticker:Ticker):void
- {
- ArrayUtils.push(tickerList, ticker);
- }
- public function removeTicker(ticker:Ticker):void
- {
- ArrayUtils.remove(tickerList, ticker);
- }
- }
- }
热门文章推荐
- [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示例
请稍候...