AS 1.0 의 Flash Player 5 버전에서 XML 과 LoadVars 클래스가 생겨나기 이전에는 외부에서 문서를 가져와 작업하기는 어려웠습니다. 결국 플래시 내부에 데이터들을 집어넣고 돌려야 한다는 얘기인데 예를 들어 어느정도 규모가 있는 홈페이지의 메뉴같은 경우는 수정사항이 많은 편입니다
메뉴가 생겼다가 사라지고 그대로더라도 링크가 바뀌는 등의...
기존에는 이럴 때마다 플래시 파일을 고쳐야 하는 매우 큰 불편함이 있었다는 이야기입니다. 플래시 개발자가 아닌 관리자들은 직접 수정할 수도 없었고요.
public class Main extends Sprite { public function Main() { var uloader:URLLoader = new URLLoader(); // 외부 문서를 불러오는데 사용하는 클래스 uloader.addEventListener(Event.COMPLETE, complete); // 문서가 다 불러와지면 complete 핸들러를 실행한다 uloader.load(new URLRequest("data.xml")); // 스트링이 아닌 URLRequest 객체로 던져서 불러와야 한다 }
protected var menu_array:Array // 메뉴 배열 protected function complete(e:Event):void { menu_array = []; var xml:XML = XML(e.target.data); // 불러온 것은 텍스트의 형태이므로 XML로 만들어준다
var cnt:uint = xml.menu.main.length(); // E4X 를 사용하여 배열로 변환 for(var i:uint=0; i<cnt; i++) { var main_xml:XML = xml.menu.main[i]; var main_array:Array = [];
var name:String = main_xml.@name; var link:String = main_xml.@link;
main_array.name = name; main_array.link = link;
var subCnt:uint = main_xml.sub.length(); for(var j:uint=0; j<subCnt; j++) { var sub_xml:XML = main_xml.sub[j]; var sub_array:Array = [];
var name:String = sub_xml.@name; var link:String = sub_xml.@link;
회사에서 교육을 위해 강의 자료를 만들고 있는 중... 졸립고 귀찮다. 어차피 회사 내 플래시 개발자는 나랑 부사수 뿐인데...
////////////////////////////////////////////
AS3.0 의 Document Class 를 이용한 작업
1. AS2.0 까지의 개발 방법
타임라인 애니메이션이 없는 어플리케이션을 플래시로 제작할 때 대부분의 개발자는 원프레임 개발을 한다. 플래시의 타임라인에 있는 1 프레임만을 사용한다고 해서 불려지는 이름이다.
타임라인을 이용한 개발은 메뉴나 에니메이션과 같이 모션이 들어가 있어서 프레임을 이용한 개발이 더 효율적일 때나 사용하게 된다. 이런 상황 이외에는 대부분 원프레임 개발을 한다.
그 이유는 타임라인이라는 것은 일반적인 랭귀지의 순차실행이 아닌 시간이라는 요소가 영향을 끼치기 때문이다. 그러다 보면 클라이언트 PC 에 따라 그 시간이라는 요소가 불규칙 적일 수 있고 어떠한 이벤트 발생을 예측하기가 어려워진다. 그리고 타임라인 이라는 요소는 ActionScript 란 언어(이하 AS) 만의 고유한 특징으로 다른 쪽 개발자가 이해하기가 어렵다.
그리고 플래시 라이트(모바일용 플래시) 보다야 덜하지만 플래시 어플리케이션의 규모가 커지면서 그 성능과 최적화가 중요요소로 자리잡게 되면서 메모리를 잡아먹을 필요없는 자원은 과감히 버려야 할 필요가 있게 되었다.
as2.0까지의 기존의 방식대로 타임라인에 메인 파일을 인클루드하여 사용하는 방법은 결과물이 MovieClip Class 로 생성된다. as 2.0의 플래시 플레이어 자체가 커다란 무비클립으로 이루어져있기 때문이다. 타임라인이라는 것은 MovieClip Class 에 들어있는 기능이고 지금까지의 개발은 사용하지도 않는 타임라인 관련 메소드와 속성을 어플리케이션에 담아왔다고 할 수 있다.
이제는 그것을 버려야 할 때가 왔다.
2. Document Class 를 사용하는 방법
일단 기우에서 먼저 말하자면 Document Class는 개인이 만들어낸 메인 파일이지 어떠한 내장 클래스가 아니다. 자바의 Main 파일을 생각하면 된다
Document Class 는 보통 Sprite Class 를 상속받아서 사용한다. Sprite Class 는 MovieClip Class 의 부모 클래스로서 타임라인이 빠진 무비클립이라고 생각하면 이해하기가 쉽다. Sprite Class 는 다음과 같은 상속 관계를 가진다
MovieClip Class > Sprite Class > DisplayObjectContainer > InteractiveObject > DisplayObject
DisplayObject : 클라이언트가 눈으로 보게 되는 화면을 이루는 모든 종류의 객체 InteractiveObject : DisplayObject 중 마우스와 키보드이벤트에 반응하는 객체 DisplayObjectContainer : 자신 안에 다른 DisplayObject 를 담을 수 있는 객체 (무비클립 안에 다른 무비클립, 그래픽심볼, 텍스트 필드가 들어가 있듯이...)
어플리케이션은 일단 눈으로 보여야 하고 사용자의 입력장치에 반응해야 하며 안에 무언가는 담겨 있어야 하니 기본적으로 Sprite Class 를 사용하게 되는 것이다. 당연히 타임라인을 사용할 일이 생기면 MovieClip Class 를 상속받아서 만들면 된다
기본적으로 다음과 같이 시작하게 된다.
package // 패키지 경로 { import flash.display.Sprite; // Sprite class 를 사용하기 위하여 클래스 임포트
public class Main extends Sprite // Sprite class 를 상속받은 Main 클래스 { public function Main() // Main 클래스의 생성자 { trace("welcome to AS3.0"); // 아웃풋 창에 "welcome to AS3.0" 문자열 출력 } } }
이렇게 만들어놓고 Main.as 라는 파일명으로 저장하면 된다. 이걸 컴파일 해서 swf 파일로 만들어보자
flash 에서 File > New 클릭 팝업으로 뜨는 New Document 창에서 맨 위의 Flash File (ActionScript 3.0) 더블클릭 후 Main.fla 로 저장 새로 만들어진 문서의 아래쪽 Properties 탭에서 비어있는 Document Class 에 위에 저장해 놓은 파일명인 Main 라고 기입 Control > Test Movie 로 컴파일하여 Main.swf 파일 생성
이렇게 하면 아웃풋창이 뜨면서 "welcome to AS3.0" 를 확인하게 된다. 드디어 Main.swf 란 어플리케이션을 만들게 되었다.
p.s. package 의 경로를 설정하였다면 Properties 탭에도 똑같이 쓰면 된다.