FLASH ActionScript 3.0 sns cocial game 开发中的定时器


 

 、、
//

package com.joyairport.model 
{
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.utils.getTimer;
    
    
/* *
     * ...
     * @author guolichun
     * JATimer  是JoyAirport 这个项目简称JA 的定时器,全局的唯一的定时器
     * 负责游戏中的所有定时器的维护
     
*/
    public class JATimer 
    {
        private static 
var  _instance:JATimer;
        private 
var  _timer:Timer;
        private 
var  _timerList:Array;
        
        
/*
         * 获取 单例类 JATimer的实例
         * 
*/
        public static 
function  getInstance():JATimer 
        {
            
if  (_instance  ==   null )
                _instance 
=   new  JATimer();
            
            
return  _instance;            
        }
        
        
/* *
         * 构造函数 用于防止单例类生成多个实例
         
*/
        public 
function  JATimer() 
        {
            
if  (_instance  !=   null )
                trace(
" 单例类,请不要实例化 " );
            
return ;
        }
        
        
/*
         * 注册计时器,首先检查id是否存在,如果不存在,就将定时器插入数组_timerList中;否则啥都不做
         * 参数:
         *         id - 唯一标识一个定时器
         *         interval - 刷新间隔,单位为秒(s)
         *         repeatCount - 重复次数
         *         callback - 回调函数,每隔interval就执行一次
         *         ...args - 回调函数参数 ///注意,参数实际并没有用到,有待改进
         * 返回值:空
         
*/
        public 
function  registerTimer(id:String, interval: int , repeatCount: int , callback:Function, args:Array): void  
        {
            
if  (_timerList  ==   null
                _timerList 
=   new  Array();
                
            
if  (check(id)  ==   - 1 ) {
                _timerList.push( { id:id, interval:interval, repeatCount:repeatCount, callback:callback, args:args, tempInterval:
0  } );
                startTimer();
            }
else  {
                trace(id 
+   " 已经存在!!! " );
            }
        }
        
        
/*
         * 注销计时器,首先检查id是否存在,如果存在,从数组_timerList中删除定时器
         * 参数:
         *         id - 唯一标识一个定时器
         * 返回值:空
         
*/
        public 
function  removeTimer(id:String): void
        {
            
var  index: int   =  check(id);
            
if  (index  !=   - 1 )
            {
                _timerList.splice(index, 
1 );    
            }
        }
        
         
/*
         * 检查指定id的Object是否在_timerList数组中,
         * 如果存在返回在_timerList数组中的索引;否则返回-1
         * 参数:
         *         id - String,唯一标识一个定时器 
         * 返回值:
         *         -1 or 指定Object的索引
         
*/
        private 
function  check(id:String): int
        {
            
var  len: int   =  _timerList.length;            
            
            
for  ( var  index: int   =   0 ; index  <  len; index ++ )
            {
                
if  (_timerList[index][ " id " ==  id)
                {
                    
return  index;
                }
            }            
            
            
return   - 1 ;
        }
        
        
/*
         * 启动计时器
         * 如果_timer为空,生成一个定时器Timer,事件发生间隔1000ms(1s);
         * 监听TimerEvent.TIMER,处理函数为timerHandler
         
*/         
        private 
function  startTimer(): void
        {
            
if  (_timer  ==   null )
                _timer 
=   new  Timer( 1000 );
            
if  ( ! _timer.running)
            {
                _timer.addEventListener(TimerEvent.TIMER, timerHandler);
                _timer.start();
            }
        }
        
        
/*
         * 停止计时器
         * 当_timerList数组为空时,即没有用户注册定时器,停止_timer
         
*/
        private 
function  stopTimer(): void  
        {
            _timer.stop();
            _timer.removeEventListener(TimerEvent.TIMER, timerHandler);
        }
 
        
/*
         * 运行计时器
         * 如果_timerList数组为空,调用stopTimer()停止计时器;
         * 否则判断_timerList数组中的定时器间隔是否达到,
         *         如果达到,就调用回调函数;
         *         否则啥都不做
         
*/         
        public 
function  runTimer(): void
        {
            
var  timerComplete:Array  =   new  Array();
            
var  len: int   =  _timerList.length;            
            
if  (len  ==   0 )
            {
                stopTimer();
                
return ;
            }
            
            
for  ( var  i: int   =   0 ; i  <  len; i ++ )
            {
                
// 运行JATimer管理的所有计时器
                
                _timerList[i][
" tempInterval " +=   1 ;
                
// 判断是否已经经过interval间隔
                 if  (_timerList[i][ " tempInterval " ==  _timerList[i][ " interval " ])
                {
                    
// 如果callback不空,执行callback函数
                     if  (_timerList[i][ " callback " !=   null )
                    {
                        _timerList[i][
" callback " ](_timerList[i][ " args " ]);
                    }
                    
                    _timerList[i][
" tempInterval " =   0 ;
                    
                    
// 判断初始repeatCount是否=0,如果注册时为0,即无限次数
                     // 否则每执行一次,就-1;然后判断repeatCount是否=0,如果=0就注销计时器
                     if  (_timerList[i][ " repeatCount " !=   0 )
                    {
                        _timerList[i][
" repeatCount " -=   1 ;
                        
if  (_timerList[i][ " repeatCount " ==   0 )
                        {
                            trace(
" 执行完成...... " );
                            timerComplete.push(_timerList[i][
" id " ]);
                        }
                    }
                }
            }
            
            
// 注销所有已完成的计时器
            len  =  timerComplete.length;
            
if  (len  !=   0 )
            {
                trace(
" 注销所有已经完成的计时器... " );
                
for  ( i  =   0 ; i  <  len; i ++ )
                {
                    removeTimer(timerComplete.pop());
                }
            }
        }
            
        
/*
         * timerHandler是_timer的TimerEvent.TIMER事件处理函数
         * 其中调用runTimer(),管理所有注册的计时器
         
*/
        private 
function  timerHandler(evt:TimerEvent): void
        {
            runTimer();
        }
        
    }

}

你可能感兴趣的:(actionscript)