Monthly Archive for October, 2007

Loader dealing with multiple threads

as3.0에서 여래개의 이미지파일을 외부에서 로드하려면 일반적으로 flash 에서 기본적으로 제공하는 Loader 클래스를 반복적으로 사용하여 처리를 해야하는데 . 이를 위해  다수의 파일을 순차적 또는 한꺼번에 로드할 수 있는 좀더 통합적인 리소스 관리가 가능한 시퀀스 로더를 제작해 보았다.

본 클래스는  ASAP를 사용하여 제작한 loader 클래스를  AS3.0 버전으로 마이그레이션(migration)한 것이다.
ASAP는 AS2.0 버전으로는 몇개 안되는 flash framework 중에 하나이다. 현재 전체적으로 AS3.0 버전으로 마이그레이션 중인 것 같다. 개인적인 생각으로는 코드자체가 방대하여 사용하기엔 좀 부담스럽지만 각각의 클래스와 클래스간의 연결고리, 이벤트처리와 같은 복합적인 내용들을 참고할 수 있어 유용한 부분이 있을 것이다.
(ASAP  as3.0 버전 SVN  http://asaplibrary.googlecode.com/svn/)

<sample code>

import com.dstrict.ub.utils.loader.*;
import com.dstrict.ub.events.*;
 
var loader:LoaderSequencer = new LoaderSequencer(1);
loader.addEventListener(LoaderEvent.START, onLoadStart);
loader.addEventListener(LoaderEvent.ALL_LOADED, onAllLoadFinished);
loader.addEventListener(LoaderEvent.COMPLETE, onLoadDone);
loader.addEventListener(LoaderEvent.PROGRESS, onLoadProgress);
loader.addEventListener(LoaderEvent.ERROR, onIOError);
 
//아래와 같이 load 메서드를 사용하여 다수의 파일을 로더에 등록할 수 있다.
// loader.load(fileUrl,fileName)
loader.load("image1.jpg","1");
loader.load("image2.jpg","2");
loader.load("image3.jpg","3");
loader.load("image4.jpg","4");
 
function onLoadStart(evt:LoaderEvent):void{
//LoaderEvent  이벤트 오브젝트 속성인 fileName 으로 load 메서드의 fileName과 동일
 trace(evt.toString()+"--------&gt;start : "+evt.fileName);
}
 
function onLoadDone(evt:LoaderEvent):void{
  this["container"+evt.fileName].addChild(evt.loader.content);
 
}
function onAllLoadFinished(evt:LoaderEvent):void{
 trace(evt.toString()+"--------&gt;onAllLoadFinished");
}
function onLoadProgress(evt:LoaderEvent):void{
 trace(evt.toString()+"--------&gt;progress : "+evt.bytesLoaded +" : "+evt.bytesTotal);
}
function onIOError(evt:LoaderEvent):void{
 trace(evt.toString()+"--------&gt;"+evt.message)
}

download sample