최근 Flash Player가 11.5로 업데이트 된 이후 AS2 콘텐츠의 외부에서 로드한 이미지가 표시되지 않는 문제가 많이 제보되고 있습니다.
예를 들어, 다음 AS2 코드를 보겠습니다.
var url:String = "http://icon.daumcdn.net/w/c/12/11/10192021148946703.png"; var mc:MovieClip = this.createEmptyMovieClip( "_mc", 0 ); mc.loadMovie( url ); mc.onEnterFrame = function() { trace( this ); }
콘솔에서 보이는 결과는 다음과 같습니다. (환경에 따라 다르게 나올겁니다)
_level0._mc
엔터프레임이 계속 동작하지 않고 돌다가 로드가 완료되는 시점에서 끊어집니다. 상황으로 미루어 짐작할 때 로드가 완료되는 순간 내부적으로 무비클립의 성질에 변화가 생기는 것 같습니다. 플래시 내부의 코드는 볼 수가 없으니 정확히 확인해 볼 수는 없겠네요.
해결책은 다음과 같습니다.
해결책 1. 로드와 함께 엔터프레임 이벤트를 상실하므로 Tween 엔진을 사용합니다.
import mx.transitions.Tween; import mx.transitions.easing.*; var url:String = "http://icon.daumcdn.net/w/c/12/11/10192021148946703.png"; var mc:MovieClip = this.createEmptyMovieClip( "_mc", 0 ); mc.loadMovie( url ); new Tween( mc, "_alpha", Regular.easeOut, 0, 100, 1, true );
물론 내부트윈은 트윈이 겹치는 상황등에서의 오류가 많으므로 Tweener나 TweenMax를 권장합니다.
해결책2. 엔터프레임 이벤트를 상실하는 것은 로드된 무비클립이므로, 빈 무비클립을 하나 더 만들어서 로드할 무비클립을 감싸주세요.
import flash.display.MovieClip; var url:String = "http://icon.daumcdn.net/w/c/12/11/10192021148946703.png"; var container:MovieClip = this.createEmptyMovieClip( "container", 0 ); var mc:MovieClip = container.createEmptyMovieClip( "_mc", 0 ); mc.loadMovie( url ); container.onEnterFrame = function() { trace( this ); }
상황에 따라 해결책 1, 2를 병행하시면 수정이 좀 더 빠르지 않을까 싶습니다.