MovieClipLoader의 리스너 중에서 onLoadStart는 로드 명령을 내리면 바로 실행되지 않고, 약간의 딜레이가 있는 후 (아마도 파일의 일부가 로드되기 시작하는 순간부터 일 것으로 추정) 실행된다.

 

그 때문에, 이전에 공개한 ImageLoader의 버퍼를 세밀하게 작동시켰을 때, 이 부분에서 에러가 난다.

 

로더는 이미 로드 명령을 내렸지만, 로드를 확인하는 버퍼에는 아직 로드 중이 아닌 것으로 확인이되어 (위의 딜레이 때문에),

같은 자리에 다시 로드 명령을 내려버린다. 그러면 이미 로드하던 무비클립이 중복(삭제)이 되어서 리스너가 마비가 되버린다.

 

ImageLoader에서의 리스너 마비는 프로그램 작동 중단의 상태로 이어지게된다. 하나하나 로드를 순서있게 하는 중에 리스너가 멈추게 되면 버퍼에 남은 이미지들을 로드하지 못하기 때문이다.

 

그래서, onLoadStart의 실행이 아니라 로드 명령을 내리는 순간에 dispatcher를 작동시켜서 이를 방지했다.



private function load():Void {
  //버퍼에 남은 이미지가 있고, 로딩중이 아니면 로드시작
  if (buffer.hasNext() && !_isActive) {
   _isActive = true;
   var data:Object = buffer.next();
   var url:String = String(data.url);
   _index = Number(data.index);
   var target:MovieClip = MovieClip(data.target);
   //
   swfLoader.loadClip(url, target);
   dispatchEvent({type:LOAD_START, target:target, index:_index}); // 딜레이를 기다리지 않고 바로 이벤트를 날린다.
  }
 }
 private function onLoadStart(_mc:MovieClip):Void { 
  //dispatchEvent({type:LOAD_START, target:_mc, index:_index});
 }