0. 실행결과
4개의 파일 N001_a.swf, N001_b.swf, N001_c.swf, N001_d.swf 를 포함하는 N001.swf 파일로 변경
N001.swf 파일에는 MovieClip 객체로 a,b,c,d 가 객체로 모두 포함됨.
1. 준비
1.1 32Bit JRE or JDK Download
http://www.oracle.com/technetwork/java/javase/downloads/index.html
1.2 Flex SDK Download
http://www.adobe.com/devnet/flex/flex-sdk-download.html
1.3 환경변수 설정
위치: 제어판-모든 제어판 항목-시스템 – 고급 시스템 속성 – 환경변수
- JAVA_HOME: C:\Program Files (x86)\Java\jdk1.8.0_51
- FLEX_SDK_HOME: C:\Program Files\Adobe\flex_sdk_4.6
Path에 추가
path=%JAVA_HOME%\bin;%FLEX_SDK_HOME%\bin;
[주의사항]
– 반드시 32Bit JAVA 를 Path로 설정해야 한다.
1.4 실행 확인
1.4.1 JAVA 버전 확인
C:>java -version java version "1.8.0_51"
1.4.2 mxmlc 실행 여부 확인
C:>mxmlc Adobe Flex 컴파일러 (mxmlc) Version 4.6.0 build 23201 Copyright (c) 2004-2011 Adobe Systems, Inc. All rights reserved. mxmlc [options] [defaultVar] 자세한 정보를 보려면 'mxmlc -help'를 사용하십시오.
2. Single SWF 파일 생성
2.1 ActionScript 파일 작성
아래의 예제는 3개의 SWF를 포함하는 파일
// N001.as package { import flash.display.Sprite; import flash.display.*; dynamic public class N001 extends Sprite { [Embed(source='./noun/N001_a.swf')] private var _N001_a:Class; [Embed(source='./noun/N001_b.swf')] private var _N001_b:Class; [Embed(source='./noun/N001_c.swf')] private var _N001_c:Class; [Embed(source='./noun/N001_d.swf')] private var _N001_d:Class; // 생성자 public function Noun() {} // // 외부에서 MovieClip을 호출할 때 사용하는 함수 // public function N001_a() : MovieClip { var mc:MovieClip = new _N001_a(); return mc; } public function N001_b() : MovieClip { var mc:MovieClip = new _N001_b(); return mc; } public function N001_c() : MovieClip { var mc:MovieClip = new _N001_c(); return mc; } public function N001_d() : MovieClip { var mc:MovieClip = new _N001_d(); return mc; } } }
2.2 파일 구조
- N001.as
- N001
- N001_a.swf
- N001_b.swf
- N001_c.swf
- N001_d.swf
2.3 명령창으로 빌드
2.2 구조로 생성된 폴더로 이동
[명령구문]
mxmlc -static-link-runtime-shared-libraries=true -use-network=false -o [출력파일 SWF 경로] -source-path="./" "[스크립트 파일 경로]"
[실행예]
C:temp>mxmlc -static-link-runtime-shared-libraries=true -use-network=false -o ./N001.swf -source-path="./" "./N001.as" 구성 파일 C:Program FilesAdobeflex_sdk_4.6frameworksflex-config.xml을(를) 불러오는 중 C:tempN001.swf(6488852바이트)
3. N001.swf 에서 Embed 파일 불러오기
var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoadCompleteHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onErrorHandler); // // 상대 경로 참조 // loader.load(new URLRequest('./N001.swf')); function onSwfLoadCompleteHandler(event:Event) : void { var loaderInfo:LoaderInfo = LoaderInfo(event.target); // // target을 Object 타입으로 반환해야 동적으로 함수를 호출할 수 있다. // this.n001Content = event.target.content as Object; if (this.n001Content == null) { trace('noun contents is empty'); return ; } // // 동적으로 함수 호출, methodName이라는 값은 N001.as 파일에 작성한 public function 함수의 이름과 일치해야 한다. // var methodName:String = 'N001_a'; var m:Function = this.n001Content[methodName]; var mc:MovieClip = m(); addChild(mc); }
Trouble Shooting
1. mlmxc 를 실행 안되는 경우
[오류메시지]
C:>mlmxc Error loading: C:Program FilesJavajdk1.8.0_51jrebinserverjvm.dll
[해결]
mxmlc 가 32 Bit Java를 참조하기 때문에 반드시 환경변수 JAVA_HOME 설정과 Path 정보를 32Bit를 참조하도록 해야함.
2. 트랜스코딩 실패
[오류메시지]
C:UsersoskwonDownloadstempN001.as(7): 열: 3: 오류: 트랜스코딩할 './noun/N001_a.swf'을(를) 확인할 수 없습니다. [Embed(source='./noun/N001_a.swf')] private var _N001_a:Class; C:UsersoskwonDownloadstempN001.as(7): 열: 3: 오류: ./noun/N001_a.swf을(를) 트랜스코딩할 수 없습니다.
[해결]
Embed 되는 SWF의 경로가 잘못되어 발생되는 문제
3. 정의되지 않은 메소드 실행
[오류 메시지]
C:UsersoskwonDownloadstemp>mxmlc -static-link-runtime-shared-libraries=true -use-network=false -o ./N001.swf -source-path="./" "./N001.as" 구성 파일 C:Program FilesAdobeflex_sdk_4.6frameworksflex-config.xml을(를) 불러오는 중 C:UsersoskwonDownloadstempN001.as(17): 열: 65 오류: 정의되지 않은 메서드 _N002_a을(를) 호출했습니다. public function N001_a() : MovieClip { var mc:MovieClip = new _N 002_a(); return mc; }
[해결]
Embed에서 선언한 전역변수와 메소드에서 사용되는 이름이 일치하지 않아 발생되는 문제.