Loading
2010. 5. 10. 19:25 - lazykuna

[Flash] AS 2.0에서 loadMovie로 외부 이미지/플래시 읽어들일 때 로드 이벤트 감지 및 리사이즈

제목이 졸라리 깁니다. 사실 문제는 플래시 플레이어의 버그에서 비롯된 것입니다.
이미 플래시에서는 객체에 onData 이벤트를 지원하고 있습니다. 사실상 로드가 완료되었을때 onData 이벤트를 다음과 같이 씀으로서 -
mc.onData = function()
{
     mc._width = 50;
     mc._height = 50;
}

// 이미지나 플래시를 읽어들인다
mc.loadMovie( url );

하지만 정작 플래시에서는 이 스크립트가 먹히질 않습니다. 왜냐하면, 플래시 플레이어의 버그 때문입니다. 이것 때문에 삽질 하시는 분들 많을 거라고 생각합니다 [저도 한참 했으니까..요(..)]. 아직도 고쳐지지 않은 것 같네요.

그래서 동적으로 무비클립을 생성하여 MovieClipLoader 객체를 이용하는 방법도 있지만(참조 : http://kuna.wo.tc/593), 이미 존재하는 무비클립에 대해서는 이 방법은 전혀 작동하지 않는다는 문제점이 있습니다 [이것도 버그에 해당하는지에 대해서는 잘 모르겠습니다]. 하지만 생각보다 단순한 방법이 있는데, 바로 loadMovie를 처리하는 무비클립 객체에 다음과 같은 이벤트를 넣어주시면 됩니다 -

onClipEvent (data) {
 if (this.getBytesLoaded() == this.getBytesTotal()) {

     //가로, 세로 크기 지정
      this._width = 50;
      this._height = 50;
   }
}

생각해 보면 무지 간단하고 흔한 소스코드입니다. 로딩이 몇 % 완료되었는지 나타낼 때 쓰는 getBytesLoaded와 getBytesTotal을 이용하여, 로딩이 완료되면 해당 작업을 해주는 거죠. 이 방법은 다행히도 정상작동합니다. 응용하면, 몇% 로딩되었는지도 표시해줄 수 있겠지요.

... 어차피 대세는 이제 AS 3.0이긴 하지만서도.