본문 바로가기

개발

Flash Player 11.5 에서 AS2의 로드한 이미지의 onEnterFrame 이벤트 관련 문제 및 해결

최근 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 );

물론 내부트윈은 트윈이 겹치는 상황등에서의 오류가 많으므로 TweenerTweenMax를 권장합니다.

해결책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를 병행하시면 수정이 좀 더 빠르지 않을까 싶습니다.