티스토리 뷰
일정시간 이후에 실행하도록 하는 것은 여기저기에서 많이 사용되는터라 클래스로 만들어봤습니다.
간단한 기능만 넣어 아주 단순하게 만들었습니다.
사용법은 아주 간단합니다.
해당 클래스를 import 한 뒤에 Later.regist() 함수로 실행할 함수와 시간을 지정하면 됩니다. 해제는 Later.unregist() 를 호출하면 됩니다. 그리고 당연히 이미 실행된 경우에는 실행취소는 불가합니다;
사용예
import lib.utils.Later; Later.regist(3000, testMessage, "testid", 100, 200, "test string"); //Later.unregist("testid");// 해제 function testMessage(a:int, b:int, c:String):void { trace(a, b, c);// 결과 100 200 test string }
Later Class
/** * Later * * 기본적인 기능은 설정한 지연시간 이후에 함수 실행하는 것이고, new 키워드로 새로운 객체를 * 생성하지 않고도 static Later 클래스를 이용해 쉽게 실행할 함수를 등록/해제 가능. * * <사용법> * * Later.regist(3000, showMessage, "test", 100, 200, "test string"); * function showMessage(a:int, b:int, c:String):void * { * trace(a, b, c); * } * * * @package lib.utils.Later * @author Sim Hee-Jae (http://kais.tistory.com/) * @copyright Copyright (c) 2010-2011 * @version 0.2 (20110129) * @license MIT License */ package lib.utils { // {{[ import flash.events.DataEvent; import flash.events.TimerEvent; import flash.utils.Dictionary; import flash.utils.Timer; // }}} // {{{ [Event(name="onLaterComplete", type="flash.events.DataEvent")] // }}} // {{{ public class Later { // {{{ Properties /** @private ** container **/ static private var _laters :Dictionary = new Dictionary(false); /** @private ** container **/ static private var _keyindex :uint = 0; // }}} // {{{ Methods public function Later() { } /** * 새로운 콜백함수 등록. 지연시간, 콜백함수, ID 값을 인자로 받고, 추가적으로 콜백함수로 넘길 * 파라메터를 받을 수 있다. 파라메터는 순서대로 나열해주면 콜백함수로 그대로 넘겨진다. * * @param (Number) delay 지연시간 * @param (Function) callback 실행할 함수 * @param (String) id (optional) 콜백함수를 구분할 ID. (사용자 지정) * 실행을 취소할 때 필요 * @param (...args) parameters (optional) 콜백함수로 넘길 인자들 * @return (void) */ static public function regist(delay:Number, callback:Function, id:String = null, ... args):void { // [2011-01-29] ADDED: ID를 지정하지 않을 경우 임시 ID 생성 if (id == null) { id = "__temporary_later__"+ String(_keyindex++); } if (_laters.hasOwnProperty(id) == true) { unregist(id as String); } _laters[id] = new LaterContainer(delay, callback, id, args); _laters[id].addEventListener("onLaterComplete", onLaterEvent); } /** * 등록된 콜백함수를 삭제. 해당 ID의 함수는 실행을 취소하고 삭제된다. * (단, 이미 실행된 경우는 실행취소는 불가) * * @param (String) id 삭제할 대상의 ID * @return (void) */ static public function unregist(id:String):void { if (_laters.hasOwnProperty(id) == true) { _laters[id].destroy(); } } /** * Later 클래스의 콜백함수 목록에서 해당 객체를 삭제하기 위해 콜백함수가 실행이 되거나 취소된 경우 * "onLaterComplete" 이벤트를 발생하여 ID를 넘겨준다. * * @param (DataEvent) e 이벤트 정보 * @return (void) */ static private function onLaterEvent(e:DataEvent):void { var id :String = e.data; _laters[id].removeEventListener("onLaterComplete", onLaterEvent); delete _laters[id]; } // }}} }// END: class }// END: package // --- LaterContainer Class --------------------------------------------------------------------- import flash.events.DataEvent; import flash.events.TimerEvent; import flash.utils.Timer; class LaterContainer extends Timer { // {{{ Properties /** @private ** Later ID **/ private var _id :String; /** @private ** 콜백함수 **/ private var _callback :Function; /** @private ** 인자값 **/ private var _params :Array; // }}} // {{{ Methods /** * 지정된 지연시간 이후에 함수 실행. 객체 생성시 넘겨진 인자값이 있다면, * 인자값을 사용하여 함수를 호출 * * @param Number delay 지연시간 (1/1000 초) * @param Function callback 실행할 함수 * @param String id 아이디 * @param Array param (optional) 실행시 넘겨줄 인자값들 */ public function LaterContainer(delay:Number, callback:Function, id:String, params:Array = null) { super(delay, 1); _id = id; _callback = callback; _params = params; addEventListener(TimerEvent.TIMER_COMPLETE, onComplete, false, 0, true); start(); } /** * 타이머 해제 * * @return void */ public function clear():void { removeEventListener(TimerEvent.TIMER_COMPLETE, onComplete); stop(); } /** * LaterContainer 삭제 * * @return void */ public function destroy():void { clear(); dispatchEvent(new DataEvent("onLaterComplete", false, true, _id)); } /** * 타이머가 완료되면 호출되며, 여기서 지정한 함수를 인자와 함께 호출함 * * @param (TimerEvent) evt 타이머 이벤트 * @return (void) */ private function onComplete(evt:TimerEvent):void { // [2011-01-29] FIXED: 인자값 여부 검사 // 인자값이 있다면 apply() 함수로, 없다면 call() 함수 실행 if (_params != null && _params.length > 0) { _callback.apply(_callback, _params); } else { _callback.call(_callback); } destroy(); } /** * Get ID * * @return (String) LaterContainer 의 ID */ public function get id():String { return _id; } // }}} }// END: class
'프로그래밍 > ActionScript' 카테고리의 다른 글
[AS3] 무비클립 회전중심축 설정 (0) | 2011.11.01 |
---|---|
[AS2] 하위 객체 삭제하기 (Remove all children in a movieclip) (0) | 2011.02.19 |
[LoaderMax] XML을 통해 이미지를 불러올때, URL 경로 변경하기 (0) | 2010.12.16 |
[AS2] 액션스크립트2.0에서 자식객체 갯수 구하기 (0) | 2010.12.16 |
[AS3] 투명 무비클립 비트맵 합치기(Merge transparent MovieClip to BitmapData) (0) | 2010.05.14 |
[AS3] 컨텍스트 메뉴(ContextMenu) 변경하기 (1) | 2010.04.24 |
[AS3] 플래시에서 마이크 이용 (0) | 2010.03.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- PCRE
- 팁&정보
- 세비지2
- 정규표현식
- as3
- 정규식
- 스크린샷
- It
- Utilities
- 이브 온라인
- 해킹
- 액션스크립트3
- dust 514
- 유틸리티
- 스타크래프트2
- 팁
- 블레이드앤소울
- ActionScript3.0
- 플래시
- game
- eve online
- 보안정보
- php
- flash
- 게임
- 보안
- 자바스크립트
- JavaScript
- 프로그래밍
- 정보
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함