Flash SWF 파일 내에서 다른 SWF 파일을 자산으로 로드할 수 있습니다. 여러 가지 이유로 외부 SWF 파일을 로드합니다.

  • 한 개의 프로젝트를 여러 개의 동영상으로 나눌 수 있으므로 개별 SWF 파일 크기가 더 작아집니다. 파일 크기가 작을수록 로드 속도가 빠르고 메모리를 보다 효율적으로 관리할 수 있습니다.  
  • 사용자가 동영상에서 수행하는 작업에 따라 필요한 컨텐트만 로드할 수 있습니다.
  • 브라우저에 다른 HTML 파일을 로드하지 않고도 여러 SWF 파일을 연속해서 재생할 수 있습니다. 페이지에 다시 로드와 관련된 일시 정지 또는 새로 고침이 없습니다.
  • 프로젝트 자산 구성에 대한 유연성을 제공합니다.
  • 단일 SWF 파일을 사용하지 않는 복잡한 사용자 인터페이스를 만들 수 있습니다. 여러 SWF 파일을 결합하여 인터페이스를 만들 수 있습니다. SWF 파일을 결합하면 인터페이스의 다른 부분에 영향을 주지 않고 보다 작은 개별 SWF 파일을 수정할 수 있으므로 편집이 쉬워집니다.
  • 여러 작성자가 별도의 FLA 파일에서 작업하여 같은 프로젝트에서 공동 작업할 수 있습니다.

컨텐트를 별도의 SWF 파일에 두는 것은 고유한 동영상 클립 기호에 두는 것과 비슷합니다. 차이는 컨텐트가 기본 SWF 파일 외부에 있다는 것입니다. JPG, PNG, GIF와 같은 이미지 파일을 로드할 수도 있습니다.

다른 SWF 파일 내에서 외부 SWF 파일을 로드하려면 다음 중 하나를 수행하십시오.

  • ActionScript 3.0 Loader 클래스
  • ActionScript 2.0 loadMovie 명령
  • ActionScript 2.0 MovieClipLoader 클래스

ActionScript 3.0 Loader 클래스 사용

ActionScript 3.0의 Loader 클래스는 외부 컨텐트를 로드하고 표시하는 데 사용하는 DisplayObject의 하위 클래스입니다. SWF 파일을 로드하려면 이 클래스의 load 메서드를 사용합니다. load 메서드에는 로드할 컨텐트의 URL 주소가 포함된 URLRequest 인스턴스인 필수 매개 변수가 한 개 있습니다.

다음 코드 예제는 Loader 인스턴스를 만들고 "myExternalMovie.swf"라는 외부 SWF 파일을 로드합니다.

var myLoader:Loader = new Loader();                     // create a new instance of the Loader class
var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder 
myLoader.load(url);                                     // load the SWF file
addChild(myLoader);                                     // add that instance to the display list, adding it to the Stage at 0,0

// (optional)
myLoader.x = 10;                                        // move the loaded SWF 10 pixels to the right (from the left edge)   
myLoader.y = 175;                                       // move the loaded SWF 175 pixels down from the top

// (optional) load a second external SWF file
var my2ndLoader:Loader = new Loader();
var url2:URLRequest = new URLRequest("ExternalSWF2.swf");
my2ndLoader.load(url2);
addChild(my2ndLoader);                                  // optionally, you could put the 2nd SWF beneath 
                                                        // the 1st by using addChildAt(my2ndLoader, 1);
                                                        // displacing the 1st SWF from position 1 to 2 in the display list

// (optional) scaling of the 2nd SWF file
my2ndLoader.scaleX = 2;                                 // scale the SWF horizontally by 200%
my2ndLoader.scaleY = 2;                                 // scale the SWF vertically by 200%

로드할 SWF 파일의 URL은 상대적이거나 절대적일 수 있습니다. Flash Player가 URL을 처리하는 방법에 대한 자세한 내용은 아래의 상대 경로를 참조하십시오. Loader 클래스에 대한 자세한 내용은 플랫폼 ActionScript 언어 참조 설명서의 Loader를 참조하십시오.

가능한 경우 root에 대한 참조는 SWF 파일이 나타내는 표시 목록의 트리 구조 부분에서 항상 최상위 표시 개체를 나타냅니다. (이미지에서 root는 Bitmap 개체를 말합니다.)

참고: ActionScript 3.0에는 ActionScript 2.0 _lockroot 또는 _level 속성에 해당하는 것이 없습니다. ActionScript 3.0 개발자 안내서의 디스플레이 프로그래밍의 기초를 참조하십시오.

ActionScript 2.0 loadMovie 명령 사용

loadMovie 명령은 외부 SWF 파일이나 이미지를 MovieClip 또는 ActionScript 2.0의 다른 수준에 해당하는 상위 동영상에 로드합니다.

loadMovie 명령은 다른 두 가지 양식이 있습니다.

  • MovieClip.loadMovie 메서드: MovieClip 메서드는 외부 컨텐트를 특정 동영상 클립 인스턴스에 로드하는 데 사용됩니다.
  • 전역 loadMovie 함수: 전역 loadMovie 함수를 사용하여 컨텐트를 동영상이나 여러 수준에 로드할 수 있습니다. 전역 버전에는 loadMovieloadMovieNum의 두 가지 변형이 있습니다. 첫 번째 변형은 컨텐트를 동영상이나 수준에 로드하고, 두 번째 변형(loadMovieNum)은 특별히 수준에 로드합니다.

MovieClip.loadMovie

외부 컨텐트를 동영상 클립 인스턴스에 로드할 때 loadMovie의 MovieClip 메서드 버전을 사용하는 것이 좋습니다. 이 버전은 컨텐트를 로드할 동영상 클립에서 직접 호출되고, 컨텐트 URL에 직접 전달됩니다.

myMovieClipInstance.loadMovie("myExternalMovie.swf");  // here only the filename is given, indicating the SWF file 
                                                       // is in the same folder as the parent SWF.

로드할 컨텐트의 URL은 상대적이거나 절대적일 수 있습니다. Flash Player가 URL을 처리하는 방법에 대한 자세한 내용은 아래의 상대 경로를 참조하십시오.

컨텐트가 로드되면 컨테이너 동영상 클립 내에 표시됩니다. 컨테이너 동영상 클립 위치 및 다른 기본 속성은 유지됩니다. 하지만 컨테이너 동영상 클립 내에 정의된 사용자 정의 속성 또는 기능은 더 이상 표시되지 않습니다. 새 컨텐트가 이전의 모든 컨텐트(onRelease와 같은 코드 및 이벤트 처리기 포함)를 대체합니다. 따라서 onLoad 이벤트 처리기 사용 시 동영상 클립에 대한 모든 시도는 작동하지 않습니다. 이 경우MovieClipLoader 클래스를 대신 사용합니다(아래 참조). MovieClip.loadMovie에 대한 자세한 내용은 ActionScript 2.0 언어 참조 설명서의 MovieClip.loadMovie를 참조하십시오.

전역 loadMovie 및 loadMovieNum

loadMovie 명령은 전역 함수로도 존재합니다. 이 함수에는 두 개의 필수 매개 변수, 즉 외부 컨텐트의 URL과 이 컨텐트가 로드되는 대상이 있습니다. 대상 매개 변수는 문자열이거나 참조일 수 있습니다. 다음 행은 "myExternalMovie.swf"를 myContainer라고 하는 동영상 클립 인스턴스로 로드하는 것입니다.

loadMovie("myExternalMovie.swf", myContainer);    // the target myContainer is an object reference
loadMovie("myExternalMovie.swf", "myContainer");  // the target "myContainer" is a string

loadMovie는 컨텐트를 Flash player의 다른 수준으로 로드할 수 있습니다. Flash player의 수준은 플레이어 레이어와 같습니다. 여러 동영상을 서로의 내부에 중첩하지 않고도 Flash player의 동일한 인스턴스에서 재생할 수 있습니다. 각 수준은 다른 수준 내에서 동영상을 독립적으로 재생할 수 있는 고유한 루트를 나타냅니다(_lockroot를 사용하지 않아도 됨).

_level과 수준 번호를 나타내는 숫자를 사용하여 ActionScript의 수준을 참조할 수 있습니다. Flash Player에 로드된 첫 번째 동영상은 _level0에 있습니다. 추가 수준은 해당 수준의 맨 위에 추가할 수 있습니다. 이어서 loadMovie를 호출하면 플레이어에서 재생 중인 현재 동영상의 맨 위에 있는 수준 1에 "myExternalMovie.swf"를 로드합니다.

loadMovie("myExternalMovie.swf", "_level1");

전역 loadMovie 함수의 변형은 loadMovieNum입니다. 이 메서드는 loadMovie와 동일하지만, 수준만 대상으로 하고 이름이 아닌 숫자로 그러한 수준을 대상으로 지정한다는 점이 다릅니다. 예를 들어 외부 SWF 파일을 수준 1(_level1)에 로드하려면 다음을 사용합니다.

loadMovieNum("myExternalMovie.swf", 1);

수준에 로드할 때 loadMovieNumloadMovie 대신 사용하는 것이 좋습니다. 자세한 내용은 ActionScript 2.0 언어 참조 설명서의 전역 loadMovie를 참조하십시오.

_lockroot를 사용하여 _root 충돌 방지

외부 동영상을 다른 동영상에 로드할 때 로드된 동영상 클립의 _root 참조가 기본 타임라인에서 이를 로드한 동영상의 타임라인으로 바뀝니다. 즉, _root는 항상 계층 구조에서 최상위 타임라인을 참조합니다. _root가 최상위 타임라인을 참조하지 않도록 하려면 로드된 동영상 클립의 타임라인 _lockroot 속성을 true로 설정합니다. 이 속성은 해당 타임라인의 모든 하위에 _root 참조 시 해당 타임라인을 참조하도록 알립니다.

this._lockroot = true;     // add this code in the main timeline of the SWF file that will be loaded into another SWF

참고: _lockroot 속성은 Flash Player 7 이상에 게시할 때만 사용할 수 있습니다.

 ActionScript 2.0 MovieClipLoader 클래스 사용

ActionScript 2.0의 MovieClipLoader 클래스는 외부 컨텐트를 MovieClip 인스턴스에 로드하는 과정을 쉽게 만들도록 설계되었습니다. 앞에서 언급한 대로 동영상 클립에 정의된 변수 및 함수는 새 컨텐트가 그러한 동영상 클립에 로드되면 제거됩니다. onLoad와 같은 콜백은 불가능합니다. 하지만 MovieClipLoader는 그러한 이벤트에 대한 대리로 작동하여 이러한 제한을 우회합니다. 별도의 MovieClipLoader 인스턴스를 만들어 다른 동영상 클립으로 컨텐트 로드를 관리합니다. 따라서 해당 동영상 클립 내에 있는 변수나 함수가 지워지지 않습니다.

MovieClipLoader 클래스를 통해 컨텐트를 동영상 클립에 로드할 때 먼저 클래스의 새 인스턴스를 만듭니다. 그런 다음 loadClip을 사용하여 컨텐트를 대상 동영상 클립에 로드합니다. 다음 예제에서는 새 컨텐트가 동영상 클립 myContainer에 로드됩니다.

var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.loadClip("myExternalMovie.swf", myContainer);

컨텐트가 로드되는지 알아보려면 MovieClipLoader 인스턴스에 onLoadInit 이벤트 처리기를 사용합니다.

var myLoader:MovieClipLoader = new MovieClipLoader(); 
myLoader.addListener(this); 
myLoader.loadClip("myExternalMovie.swf", myContainer); 

function onLoadInit(mc:MovieClip) 
    { 
        trace("content has been loaded into "+mc); 
    }

동영상 클립에 컨텐트 로드에 대한 정보를 보다 잘 제어하려면 MovieClip.loadMovie 대신 MovieClipLoader 클래스를 사용합니다. (예를 들면 로드 진행률을 확인하려는 경우 이 이벤트 처리기를 사용합니다.) MovieClipLoader 클래스에 대한 자세한 내용은 ActionScript 2.0 언어 참조 설명서의 MovieClipLoader를 참조하십시오.

참고: MovieClipLoader 클래스는 Flash Player 7 이상에 게시할 때만 사용할 수 있습니다.

 상대 경로를 사용하여 컨텐트 로드

LoaderloadMovie에 상대 경로를 사용하면 혼동을 줄 수 있습니다. SWF 파일 또는 동영상 클립의 타임라인이 loadMovie 작업을 수행할 수 있으므로 "로드 중인 동영상이 기준으로 하는 타임라인은 무엇입니까?"라는 질문을 합니다. _level0의 기본 타임라인을 기준으로 합니까? 아니면 동영상 로드 작업을 수행한 타임라인을 기준으로 합니까? 대답은 간단합니다. 로드된 동영상은 항상 해당 동영상을 로드한 타임라인을 기준으로 합니다. 외부 SWF 파일 로드와도 관련된 상태 경로에 대한 설명은 상대 URL이 올바르게 참조되지 않음 | Flash(tn_04157)를 참조하십시오.

프레임 속도 고려 사항

대부분의 경우 로드된 동영상은 상위 동영상의 프레임 속도를 상속합니다. 예를 들어 프레임 속도가 12fps인 SWF 파일은 프레임 속도가 24fps인 동영상에 로드되면 24fps로 재생됩니다. 단, 로드 중인 동영상에 동기화가 "스트림"으로 설정된 타임라인의 사운드가 포함된 경우는 예외입니다. 그런 경우에만 해당 사운드가 올바르게 재생되도록 하기 위해 기본 동영상이 로드된 동영상의 프레임 속도를 상속합니다.

참고: ActionScript 3.0에서 Stage.frameRate 속성을 사용하여 프레임 속도를 동적으로 변경할 수 있습니다.

키워드: Flash Player, 동영상 로드; ActionScript; 스크립팅; 수준; 대상에 알리기; 변수; 대상; 인스턴스; SWF; loadMovie; tn_14190

이 작업에는 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License의 라이센스가 부여되었습니다.  Twitter™ 및 Facebook 게시물은 Creative Commons 약관을 적용받지 않습니다.

법적 고지 사항   |   온라인 개인 정보 보호 정책