Custom Interval Class

<Interval Class>

import com.dstrict.UB.events.Dispatcher;
import com.dstrict.UB.management.IntervalEvent;
/**--------------------------------------------------------------------------------
* @description 인터벌 생성및 실행 클래스
*    원하는 함수를 사용자가 원하는 횟수만큼 호출한후 onIntervalEnd 를 발행시킴...
*
* @implement
*   Interval#onIntervalEnd
*
* @example
* <code>
*  _interval=new Interval();
 _interval.addEventListener(IntervalEvent.ON_INTERVAL_END,this);
 _interval.makeInterval(functionScope,functionReference,duration,loop,[parameter array]);
 
 public function onIntervalEnd(evt:IntervalEvent):Void{
    // 인터벌 이후에 이벤트를 사용하려면 구현...
     parameter array 인자가 그대로 넘어온다...
 
  }
* </code>
*
*--------------------------------------------------------------------------------*/
class com.dstrict.UB.management.Interval extends Dispatcher{
 private var _IntervalID : Number;
 private var _count : Number;
 
  /**------------------------------------------------------------------------------
     * Constructor function
   *------------------------------------------------------------------------------*/
 public function Interval() {
  //생성자 함수 필요없음....
 }
 
 /**------------------------------------------------------------------------------
 * @description 전역속성인 setInterval 함수의 id 값 전부 제거
 *-------------------------------------------------------------------------------*/
 public static function clearAllInterval():Void{
  var topId=setInterval(function(){
  },100);
  for(var i=0 ; i&lt;=topId; i++){    clearInterval(i);   }  }       
/**------------------------------------------------------------------------------    
 * @description interval 에의한 실행함수     
* @param loop : Number, 함수 실행할 횟수     
*@param referObj : Object, 인터벌에 등록한 함수 오브젝트    
 *-------------------------------------------------------------------------------*/   
public function execute(loop:Number,referObj:Object):Void{      if(_count&gt;loop){
        clearInterval(_IntervalID);
       _count=1;
     startEvent(new IntervalEvent(IntervalEvent.ON_INTERVAL_END,referObj.param)); //Dispatch  event
     }else{
        if(referObj!=undefined){
           referObj.func.apply(referObj.obj,referObj.param);
         }
         _count++;
      }
    }
 
 /**-----------------------------------------------------------------------------
 * @description  인터벌 생성
 * @param scope : Object, 실행할 함수의 스코프
 * @param func : Function, 실행할 함수
 * @param duration : Number, 인터벌 간격(밀리세컨드)
 * @param loop : Number, 함수 실행할 횟수
 *-------------------------------------------------------------------------------*/
 public function makeInterval(scope:Object,func:Function,duration:Number,
                                            loop:Number,parameter:Array):Void{
 
   clearInterval(_IntervalID);
   _count=1;
  _IntervalID=setInterval(this,"execute",duration,loop,{func:func,obj:scope,param:parameter});
 
 }
}

<DispatcherClass>

import mx.events.EventDispatcher;
/**
* @description     이벤트 디스패처 확장 클래스
*                        이벤트 발생할 클래스에 상속후 startEvent 함수 실행.....
*/
class com.dstrict.UB.events.Dispatcher {
public var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
public function Dispatcher() {
EventDispatcher.initialize(this);
}
public function startEvent(obj : Object) : Void {
dispatchEvent(obj);
}
}

자주사용하는 인터벌을 쓰기 편하게 클래스로 만들었다.  원하는 함수를 원하는 횟수만큼 호출한후 자동으로 인터벌이 삭제된다. 함수 호출시 파라미터도 같이 호출할 수도 있고 인터벌이후에 발생하는 이벤트도 실행할 수도 있게 구성했다.

<example code>
test 함수를 문자열 2개 인자와 함께 200 millisecond 간격으로 5번 호출한다.

_interval=new Interval();
_interval.addEventListener(IntervalEvent.ON_INTERVAL_END,this); --> 인터벌이후에 발생하는이 벤트를 받기위해서 리스너를 붙인다. 받을 이벤트가 없다면 필요없다.
_interval.makeInterval(this,test,200,5,["test string1......","test string2......"]);
 
function test(str:String,str2:String):Void{
trace(str);
trace(str2);
}
function onIntervalEnd(evt:IntervalEvent):Void{
// 인터벌 이후에 이벤트를 사용하려면 구현...
// evt 값은 makeInterval 에서 test 함수를 호출할때 같이 쓰인 문자열 인자값이 배열로 그대로 들어온다.
// evt.target[0] -----> test string1...... evt.target[1] -----> test string2......
}

0 Responses to “Custom Interval Class”


  • No Comments

Leave a Reply