您当前的位置: 首页 > 

Jave.Lin

暂无认证

  • 1浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AS3 TimerManager

Jave.Lin 发布时间:2013-10-12 12:14:55 ,浏览量:1

之前的TimerManager好几个版都是使用别人写的;

自己写的没有备份过;

还是累积一下,并备份一下,再造一下轮子:

代码:

package org.ly.manager
{
	import flash.utils.getTimer;
	
	/**
	 * 时间器管理类
	 * @author Jave.Lin
	 * @date 2013-10-12
	 **/
	public class TimerManager
	{
		private static var _instance:TimerManager;
		public static function get instance():TimerManager
		{
			if (!_instance) _instance = new TimerManager();
			return _instance;
		}
		
		private var _elapsedTime:int = -1;
		private var _i:int;
		private var _cb:TimerCallback;
		
		private const _callbackArr:Vector. = new Vector.();
		
		public function TimerManager()
		{
			
		}
		/**
		 * 添加指定的定时回调,参数,执行时间间隔,执行次数(= times;
	}
	
	public function TimerCallback()
	{
		id = getId();
	}
	
	timer_mgr_ns function update():void
	{
		t = getTimer();
		(curTime == -1) && (curTime = t);
		eplasedTime += t - curTime;
		while (!timer_mgr_ns::isOutTimes && (eplasedTime >= interval)) {
			// 这里就不用 eplasedTime -= interval;的方法了当然,如果你想要TimerManager可兼容这种补帧逻辑
			//也可以在TimerManager上添加一个标识来区别这里的逻辑处理
			if (interpolate) {
				eplasedTime -= interval;
			} else {
				eplasedTime = 0;
			}
			if (!timer_mgr_ns::execute())
				break;
		}
		curTime = t;
	}
	
	timer_mgr_ns function execute():Boolean
	{
		if (callback == null) return false;
		callback.apply(null, params);
		executedTime += 1;
		return true;
	}
}

调用:

		stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
		test1ID = TimerManager.instance.addTimer(testOnTimer, [1000, 0, "test1"]);
		trace("test1ID : " + test1ID);
		test2ID = TimerManager.instance.addTimer(testOnTimer, [2000, 3, "test22222"], 2000, 3);
		trace("test2ID : " + test2ID);
		
		private var test1times:int = 0;
		private var test1ID:int;
		private var test2ID:int;
		
		private function testOnTimer(a:int, b:int, c:String):void
		{
			if(c == "test1")
			{
				test1times += 1;
				if(test1times > 10)
				{
					TimerManager.instance.removeTimer(test1ID);
					trace("remove test1ID : " + test1ID);
					return;
				}
			}
			trace(" testOnTimer : interval:" + a + " times:" + b + " name:" + c);
		}
		
		private function onEnterFrame(e:Event):void
		{
			TimerManager.instance.update();
		}
输出结果:

test1ID : 0
test2ID : 1
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:2000 times:3 name:test22222
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:2000 times:3 name:test22222
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:2000 times:3 name:test22222
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:1000 times:0 name:test1
 testOnTimer : interval:1000 times:0 name:test1
remove test1ID : 0

关注
打赏
1664331872
查看更多评论
立即登录/注册

微信扫码登录

0.0523s