=================================
=================================
=================================
외부 SWF파일 로드
이전 SWF 파일을 로드할 때 고려할 사항
ActionScript 3.0에서 SWF 파일은 Loader 클래스를 사용하여 로드됩니다. 외부 SWF 파일을 로드하려면 ActionScript에서는 다음 네 가지를 수행합니다.
- 파일의 URL을 사용하여 새 URLRequest 객체를 만듭니다.
- 새 Loader 객체를 만듭니다.
- 이 Loader 객체의 load() 메서드를 호출하여 URLRequest 인스턴스를 매개 변수로 전달합니다.
- 표시 객체 컨테이너(예: Flash 문서의 기본 타임라인)의 addChild() 메서드를 호출하여 Loader 인스턴스를 표시 목록에 추가합니다.
완성된 코드는 다음과 같습니다.
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/externalSwf.swf");
var loader:Loader = new Loader()
loader.load(request);
addChild(loader);
위와 동일한 코드를 사용하여 JPEG, GIF, PNG 이미지 등의 외부 이미지 파일을 로드할 수 있습니다. 이때 SWF 파일 URL이 아니라 해당 이미지 파일의 URL을 지정합니다. SWF 파일은 이미지 파일과 달리 ActionScript를 포함할 수 있습니다. SWF 파일 로드 프로세스는 이미지 로드와 동일하지만, Flash Player 또는 AIR에서 SWF를 재생하고 있으며 ActionScript를 사용하여 외부 SWF 파일과 통신하려는 경우 외부 SWF 파일을 로드할 때 로드하는 SWF 파일과 로드되는 SWF 파일이 모두 동일한 보안 샌드박스에 있어야 합니다. 또한 외부 SWF 파일의 클래스 네임스페이스가 로드하는 SWF 파일의 클래스 네임스페이스와 동일한 경우 네임스페이스의 충돌을 방지하기 위해 로드되는 SWF 파일에 대한 새 응용 프로그램 도메인을 만들어야 할 수도 있습니다. 보안 및 응용 프로그램 도메인에 대한 자세한 내용은 ApplicationDomain 클래스 사용 및 SWF 파일 및 이미지 로드을 참조하십시오.
외부 SWF 파일이 성공적으로 로드되면 Loader.content 속성을 통해 액세스할 수 있습니다. 외부 SWF 파일이 ActionScript 3.0용으로 제작된 경우 이 파일은 확장하는 클래스에 따라 무비 클립이나 스프라이트 중 하나가 됩니다.
이전 SWF 파일을 로드할 때 고려할 사항
이전 버전의 ActionScript를 사용하여 외부 SWF 파일을 제작한 경우 고려해야 할 중요한 제한 사항이 있습니다. AVM2(ActionScript Virtual Machine 2)에서 실행되는 ActionScript 3.0 SWF 파일과는 달리 ActionScript 1.0 또는 2.0용으로 제작된 SWF 파일은 AVM1(ActionScript Virtual Machine 1)에서 실행됩니다.
AVM1 SWF 파일이 로드되면 로드된 객체(Loader.content 속성)는 AVM1Movie 객체가 됩니다. AVM1Movie 인스턴스는 MovieClip 인스턴스와 동일하지 않습니다. 표시 객체이지만 무비 클립과 달리 타임라인 관련 메서드나 속성이 없습니다. 부모 파일인 AVM2 SWF는 로드된 AVM1Movie 객체의 속성, 메서드 또는 객체에 대한 액세스 권한이 없습니다.
AVM2 SWF 파일에 의해 로드된 AVM1 SWF 파일에는 추가 제한 사항이 있습니다. 자세한 내용은 ActionScript 3.0 언어 및 구성 요소 참조 설명서의 AVM1Movie 클래스 샘플을 참조하십시오.
=================================
=================================
=================================
[AS3.0] Loader Class를 사용한 swf의 로드
flash.display.Loader 클래스는 swf나 image파일 등을 로드 하는 데 사용되는 클래스이다.
아래에 있는 예제 코드는 swf를 로드하여 로드한 swf가 document 클래스를 포함할 경우,
그 변수나 함수에 접근하기 위해 인스턴스화 시킨 것이다.
==================================================================================
private var mainTimeLine : Sprite;
private var container : Sprite;
private var loadedSwf: DisplayObject;
private function initialize () : void
{
loadSwf("./loadedSwf.swf");//로드할 swf의 경로를 인자로 넘겨줌
}
private function loadSwf (address : String) : void
{
var loader : Loader = new Loader();
loader.load(new URLRequest(address));
var linkFn : Function = function (e : Event) : void
{
loadedSwf = onLoadComplete(e);
};
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, linkFn);
}
private function onLoadComplete (e : Event) : DisplayObject
{
trace("Load Complete!!!");
mainTimeLine.addChild(e.target.content as DisplayObject);
return e.target.content;
}
==================================================================================
이렇게 되면 loadedSwf["변수나 함수 명"]와 같은 식으로 변수나 함수에 접근이 가능하게 된다.
접근할 때는 "."(점 연산자)을 이용하지 않고,
(loadedSwf as Object)["function0"]();//인스턴스를 이용한 fucntion0 호출 예(함수 접근의 예)
와 같은 식으로 접근하여야 한다.
onLoadComplete 를 사용한 것은 코드가 비동기방식이기 때문에
로드가 완료된 시점에서 변수에 로드한 swf 클래스를 할당해 주어야 하기 때문이다.
여기서 주의할 것은 linkFn 이 지역변수로 사용되었기 때문에 removeEventListener가 불가능하게 된다는 점이다.
이 경우는 더이상 함수가 호출되거나 할 일도 없고 상호 참조로 메모리에 쌓일 염려는 없지만,
일반적으로 위와 같이 사용할 경우에는 linkFn 과 같이 다른 함수로의 연결함수를 사용할 때는
전역변수로 지정하여 사용하도록 하자. (꼭 필요한 경우만)
전역변수로 선언하여 사용하게 되면 removeEventListener()로 제거가 가능하다.
=================================
=================================
=================================
'ADOBE > ActionScript' 카테고리의 다른 글
플래시 as3.0 swf와 swf 간의 통신 as3.0 에서 loader를 사용해swf를 로드한 후 loader.content 안에 있는 함수실행 등등 (0) | 2020.09.21 |
---|---|
플래시 as3.0 보안과 플래시 리모팅 관련 (0) | 2020.09.21 |
[AS] 플래시 액션스크립트 로딩화면 프리로더 프리로딩 관련 (0) | 2020.09.21 |
[AS] 플래시 as3.0 브라우져 액션스크립트 연동 관련 (자바스크립트 연동, asp, jsp, php 연동) (0) | 2020.09.21 |
[AS] 플래시 AS3.0 SWC배포 하기 관련 (0) | 2020.09.21 |