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

[AS3]as3的时间事件as3写的时间管理工具类

时间:2014-08-18 11:34酷播
[AS3]as3的时间事件as3写的时间管理工具类

时间事件管理工具类 [AS3]as3的时间事件as3写的时间管理工具类

  1. /*  
  2.   TimerManager.add(hs,1000,hs1); 
  3.   var a:int = 0
  4.   function hs():void 
  5.   { 
  6.       trace(a++); 
  7.   } 
  8.  
  9.   function hs1():Boolean 
  10.   { 
  11.       if(a==5) 
  12.       { 
  13.           return true; 
  14.       } 
  15.       return false; 
  16.   } 
  17. */ 
  18.  
  19. package com.upupgame.utils 
  20.     import flash.events.TimerEvent; 
  21.     import flash.utils.Timer; 
  22.     /** 
  23.      * ******通过使用这个类,我们可以节省很多资源,所有频率相同的timer都将统一成一个timer来管理, 
  24.      * 这样可以节约很多性能,当然也可以定义不同频率的timer,但是在这里鼓励统一频率 
  25.      * 这样可以只需要一个timer就完成所有的循环工作, 
  26.      * 然后当使用这个管理类的时候不要担心会丢失常用的timer功能, 
  27.      * 例如你想在达到某个条件停止物体的循环运动的时候, 
  28.      * 你可以在添加的时候加一个限制函数,甚至比普通的用法更简单 
  29.      * 
  30.      * ******这个类同时提供一些其他的有用功能, 
  31.      * 其中尤为重要的是可以在任何时刻调用输出信息函数, 
  32.      * 可以查看当前使用了几个timer,以及每个timer的频率和绑定的函数列表,这样可以方便 
  33.      * 地在调试的时候查看信息 
  34.      * 
  35.      * ******这个类的使用非常简单,如果你不想了解其内部机制, 
  36.      * 则只需要在想添加一个timer的时候, 
  37.      * 使用一句TimerManager.add(..)就可以了, 
  38.      * 如果定时器没有启动,则调用此函数后将立即启动 
  39.      * 当满足了停止的条件或者手动移除了所有的函数列表的时候timer将自动停止, 
  40.      * 不用担心在不需要循环的时候会占用额外的cpu时间 
  41.      * 
  42.      * ******你可以在添加每个函数的时候添加一个限制函数, 
  43.      * 这个限制函数必须有返回值,如果返回值是false,则循环将一直进行下去, 
  44.      * 如果某个循环中限制函数的返回值为true,则停止此循环 
  45.      */ 
  46.     public class TimerManager 
  47.     { 
  48.         /** 
  49.         *定时器列表,格式为timerList.T20:Timer.之所以如此结构是为了方便多个timer的取出和赋值,方便管理大量的timer对象 
  50.         */ 
  51.         public static  var timerList:Object=new Object(); 
  52.         /** 
  53.         *函数列表,结构跟定时器列表类似,为functionList.T1:Array,里面包含了某个定时器的所有要执行的函数引用 
  54.         */ 
  55.         private static  var functionList:Object=new Object(); 
  56.         /** 
  57.         *循环函数,每个间隔的Timer都有一个循环执行的函数, functionList.T1:Function 
  58.         */ 
  59.         private static  var funcList:Object=new Object();  
  60.  
  61.         private static  var limitFuncList:Object=new Object(); 
  62.         /** 
  63.         *向管理器添加一个要定时执行的函数, 
  64.         * 第二个参数必须有返回值,当返回值为true的时候,将停止此绑定函数的循环 
  65.         * 如果没有指定第三个参数,默认为1秒执行一次 
  66.         * 执行此函数后,将自动开启timer,而无需手动开启,当满足条件后将根据条件移除某个函数,当函数列表为空时, 
  67.         * 将停止timer,节省资源, 
  68.         * @param func 要添加的函数 
  69.         * @param limitFunc 绑定的限制函数,当满足此函数(==true)时,将停止此循环,即移除此函数, 
  70.         * 如果要再满足条件时执行其他函数,请在第一个参数 
  71.         * 函数中书写,无需特殊绑定 
  72.         * @param timerInter 执行此函数的周期 
  73.         * @return 
  74.         * 
  75.         */  
  76.  
  77.         public static function add(func:Function,limitFunc:Function=null,timerInter:int=1000):void 
  78.         {  
  79.             if (limitFunc == null) 
  80.             { 
  81.                 limitFunc = function():Boolean 
  82.                 { 
  83.                     return false; 
  84.                 } 
  85.             } 
  86.             var ii:String="T"+timerInter; 
  87.             if (timerList[ii] == undefined) 
  88.             { 
  89.                 //如果还没有定义这个间隔的timer,则定义之 
  90.                 timerList[ii]=new Timer(timerInter); 
  91.             } 
  92.             //向某个定时器添加一个要定时执行的函数 
  93.             if (functionList[ii] == undefined) 
  94.             { 
  95.                 functionList[ii]=new Array(); 
  96.                 functionList[ii].push(func);  
  97.  
  98.                 limitFuncList[ii]=new Array(); 
  99.                 limitFuncList[ii].push(limitFunc); 
  100.             } 
  101.             else 
  102.             { 
  103.                 functionList[ii].push(func); 
  104.                 limitFuncList[ii].push(limitFunc); 
  105.             }  
  106.  
  107.             if (funcList[ii] == undefined) 
  108.             { 
  109.                 //定义某个定时器循环函数 
  110.                 funcList[ii] = function():void 
  111.                 { 
  112.                     //满足条件时,移除此函数,停止对其的循环 
  113.                     try 
  114.                     { 
  115.                         for (var i:int = 0; i < limitFuncList[ii].length; i++) 
  116.                         { 
  117.                             //trace(limitFuncList[ii][i]()); 
  118.                             if (limitFuncList[ii][i]() == true) 
  119.                             { 
  120.                                 TimerManager.removeFunc(functionList[ii][i],timerInter);  
  121.                             } 
  122.                         }  
  123.  
  124.                     } 
  125.                     catch (e:Error) 
  126.                     { 
  127.                     } 
  128.                     var length:int=functionList[ii].length; 
  129.                     if (length == 0) 
  130.                     { 
  131.                         timerList[ii].stop(); 
  132.                     } 
  133.                     // trace(length) 
  134.                     for ( i = 0; i < functionList[ii].length; i++) 
  135.                     { 
  136.                         //执行所有的函数 
  137.                         // trace(functionList[ii]) 
  138.                         functionList[ii][i](); 
  139.                     } 
  140.                 } 
  141.                 timerList[ii].addEventListener(TimerEvent.TIMER,funcList[ii]); 
  142.             }  
  143.  
  144.             if (timerList[ii].running == false) 
  145.             { 
  146.                 //如果当前定时器没有运行则运行之 
  147.                 timerList[ii].start(); 
  148.             } 
  149.         } 
  150.         /** 
  151.         *从某个频率的timer函数列表里移除某函数 
  152.         * @param func 
  153.         * @param timerInter 
  154.         * 
  155.         */ 
  156.         public static function removeFunc(func:Function,timerInter:int=1000):void 
  157.         { 
  158.             var ii:String="T"+timerInter; 
  159.             //搜索数组,如果发现的确有此func,则删除之,否则不做任何处理,也不抛出任何错误 
  160.             var index:int=functionList[ii].indexOf(func); 
  161.             if (index >= 0) 
  162.             { 
  163.                 //存在此函数 
  164.                 functionList[ii].splice(index,1); 
  165.                 limitFuncList[ii].splice(index,1); 
  166.                 //trace(functionList[ii]); 
  167.             } 
  168.         } 
  169.         /** 
  170.         *在调试中输出当前所有定时器的详细信息 
  171.         * @return 
  172.         * 
  173.         */ 
  174.         public static function traceInfo():void 
  175.         { 
  176.             trace("当前运行的计时器如下:") 
  177.             for (var timer:* in timerList) 
  178.             { 
  179.                 trace("timer-"+timer+":时间间隔:"+timerList[timer].delay+"已运行次数:"+timerList[timer].currentCount+"运行状态:"+timerList[timer].running);  
  180.  
  181.                 trace("当前timer执行的函数列表如下:"); 
  182.                 for (var e:* in functionList[timer]) 
  183.                 { 
  184.                     trace(" "+e+":"+getFunctionName(functionList[timer][e])); 
  185.                 } 
  186.             } 
  187.         } 
  188.         /** 
  189.          *获取函数名,输入一个函数对象,将获取到此函数的函数名,用于输出信息 
  190.          * @param fun 
  191.          * @param useParameter 
  192.          * @return 
  193.          * 
  194.          */ 
  195.         public  static  function getFunctionName(fun:Function):String 
  196.         { 
  197.             var funName:String = "";  
  198.  
  199.             try  
  200.             {  
  201.                 fun(fun, fun, fun, fun, fun); 
  202.                 fun(); 
  203.             } 
  204.             catch (err:Error) 
  205.             { 
  206.                 funName = err.message.toString().replace(/.+\#|\(\).*|.+: /g, ""); 
  207.             } 
  208.             if (funName == "") 
  209.             { 
  210.                 return "只能获取类层次的函数名,无法获取局部函数名"; 
  211.             } 
  212.             return funName; 
  213.         } 
  214.         public  static  function pauseTimer(timerInterval:int=1000):void 
  215.         { 
  216.             for (var i:* in timerList) 
  217.             { 
  218.                 timerList[i].stop(); 
  219.             } 
  220.         } 
  221.         public  static  function resumeTimer(timerInterval:int=1000):void 
  222.         { 
  223.             for (var i:* in timerList) 
  224.             { 
  225.                 timerList[i].start(); 
  226.             } 
  227.         } 
  228.     } 

 

热门文章推荐

请稍候...

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

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