Flex3.0&AS3 2008. 9. 25. 09:23

컴파일된 플래시나 플렉스 SWF 파일에 접근하기


플렉스로 작업하다 보명 종종 컴파일된 파일에 접근해야하는 경우가 생깁니다. 플렉스로는 실제 플래시의 화려한 모션을

구현한다는것은 노가다에 가까운 일이므로.. 플렉스와 플래시로 연동만 잘하면 좋긴하지만 몇가지 문제점들이 있습니다.

 

컴파일된 SWF 를 플렉스에 가져오는 방법은 수없이 많습니다만 중요하다고 생각되는 몇가지만 적어보았습니다.

 

1. 외부 SWF 파일의 초기화 시점에대한 실수

 

외부 SWF 파일을 로드하기 위해서 기본적인 SWFLoader 컨텐츠가 있긴하지만 로드후에 바로 함수를 적용시킬때 종종

null 객체 참조오류에 부딛힌분들이 계실겁니다. 또는 애꿏은 플래시를 탓하던가 말이죠. 사실 SWFLoader 의

complete 이벤트만으로는 로드후에 초기화 함수를 호출하는데 문제가 있습니다. complete 이벤트는 다운로드를 모두 받았을때의

시점을 이야기하는것이기 때문이죠. 실제 로드후에 초기화 함수를 호출하려면 컨텐츠의 이벤트를 트리거 해야합니다.

 

 

 

<mx:SWFLoader id="FlashLoader" source="output.swf" complete="completeHandler()"/>

 

private function completeHandler():void

{

       MovieClip(FlashLoader.content).addEventListener(Event.ENTER_FRAME , initFlash);

}

 

private function initFlash(e:Event):void

{

       //플래시 초기화 실행

}

 

플렉스로 만들어진 SWF파일의 경우 MovieClip 이 아니기 때문에 조금 다릅니다.

 

 

<mx:SWFLoader id="FlexLoader" source="output.swf" complete="completeHandler()"/>

 

private function completeHandler():void

{

       FlexLoader.content.addEventListener(mx.events.FlexEvent.APPLICATION_COMPLETE , initFlex);

}

                   

private function initFlex(e:Event):void

{

       //플렉스 초기화 실행

}

 

 

2. 함수나 객체에 접근하기

 

플래시와 플렉스의 경우 구조 자체가 많이 다르기 때문에 접근하는 방법도 서로 다릅니다.

 

 

<mx:SWFLoader id="FlashLoader" source="flash.swf"/>

 

MovieClip(FlashLoader.content).함수();

MovieClip(FlashLoader.content).변수;

 

FlashLoader.content["root"].함수();

FlashLoader.content["root"].변수();

 

플래시는 root 플렉스는 application 으로 접근합니다.

 

 

<mx:SWFLoader id="FlexLoader" source="flex.swf"/>

 

FlexLoader.content["application"].함수();

FlexLoader.content["application"].변수();

 

함수나 변수에 접근할때 반드시 네임스페이스가 public 로 설정되어야 한다는 점도 잊지 마시기 바랍니다.