Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- watch
- 스케일폼
- as3
- as3.0
- 플래시
- GDC
- Document Class
- DataBinding
- as2
- 클릭
- ApplicationDomain
- flash player 10
- autodesk
- KGC 2013
- 애드온
- 샌프란시스코
- scaleform3
- 수학정석
- flash cs3
- 집합의 연산
- scaleform
- addChild
- Chart
- 강좌
- flash
- CLIK
- 형변환
- scaleform4
- MMOKit
- 태그클라우드
Archives
- Today
- Total
scaleform.minarto.com
Document Class in as2 - 0 본문
오늘도 주말에 회사에 나와 회사 코드를 좀 개선하려고 뜯어보고 고치고 하다가 만들어버린(실제로는 어제부터) 코드가 있습니다.
바로 as2 용 Document Class 입니다.
혹시 제가 포스팅에만 열중할거라 생각하시는 분이 있을까 하는 기우에 몇마디 드리자면,
보통 제가 포스팅을 할 때는 이렇습니다.
1. 회사 업무에 필요한 코드가 생겼다...
2. 개발
3. 파트원들에게 교육
4. 파트원들이 직접 적용하도록 함 (강의만 들으면 까먹으니깐...)
5. 그 중에서 외부에 오픈해도 될만한 주제로 선별하여 포스팅
게다가 회사 팀원들에게는 더 개선된 실제 코드를 보여주면서 강의를 하죠...
머랄까, 회사원으로서의 일종의 암묵적인 룰을 지킨다고나 할까요?
포스팅은 사실 빙산의 일각...(아니아니, 일각 보다는 좀 많이 포스팅하는군요 :^) 인 셈이죠...
1. Document Class 를 만들 수 없는 as2
as2 에서는 as3처럼 Document Class 를 만들 수 없습니다.
앞선 글에서 잠시 언급했 듯 as2 에서는 Document Class 의 부모 클래스가 되어야 할 MovieClip 이 네이티브 클래스가 아닌, DOM 으로 취급하기 때문입니다.
처음부터 as2만 쓰신 분이면 몰라도 as3의 Document Class 의 편리함을 접한 분이라면 불편한 것이 여간 많은게 아닙니다.
일반적으로 include 로 as 파일을 불러들여서 작업을 하기도 합니다만, class 문법을 사용하지 않으니 코드 재활용하기가 꽤 불편한 편입니다.
최상위 컨테이너라면 그냥 위에 언급한대로 include 만 써도 어찌어찌 짜게 되니 그럭저럭 해결되지만, 로드해서 사용하게될 swf 들이 문제입니다.
암튼 각설하고 만드는 법을 써보죠...
2. prototype
일단 만들게 될 Document class 는 MovieClip 을 상속받아야 합니다... 뭐 당연하겠죠?
Document 라고 이름지어보죠
class flashx.display.Document extends MovieClip {
public function Document($main:MovieClip) {
$main.__proto__ = this;
this = Document($main);
}
public function alert($msg:String):Void {
trace($msg)
}
}
생성자 함수는 $main 이라는 무비클립을 인자로 받습니다. 그리고 $main 의 __proto__ 라는 속성에 현재의 클래스 객체의 포인터인 this 를 연결합니다.
as2레퍼런스에는 __proto__ 라는 속성에 대해 다음과 같이 나옵니다.
객체를 만드는 데 사용되는 클래스(ActionScript 2.0) 또는 생성자 함수(ActionScript 1.0)의 prototype 속성을 참조합니다. 모든 객체는 만들어질 때 자동으로 __proto__ 속성이 지정됩니다. ActionScript 인터프리터는__proto__ 속성을 사용하여 객체의 클래스 또는 생성자 함수의 prototype 속성에 액세스하여 객체가 수퍼 클래스에서 상속하는 속성과 메서드를 알아냅니다.
그리고 플래시의 메인 타임라인에 다음과 같이 실행합니다.
new Document(this);
자, 이러면 일단 1차 작업이 끝난겁니다.
해당 메인 타임라인에서 alert("1") 를 실행하시면 예상한 대로 alert 함수가 실행됩니다.
메인 타임라인은 무비클립입니다. 그 무비클립의 __proto__ 속성이 Document 객체를 가르키기 때문에 무비클립에서 바로 Document 클래스의 멤버변수와 함수들을 사용할 수 있게 된겁니다.
그럼 이제 생성자 함수 맨 밑에 무비클립을 생성하는 명령어를 넣어볼까요?
var content:MovieClip = createEmptyMovieClip("contnet", getNextHighestDepth());
trace(content)
어라? _level0.contnet 라고 콘솔에 찍혀야 할 것 같지만 undefined 가 떠버립니다.
alert 는 잘 실행되었는데 말이죠.
도대체 뭐가 잘못된 걸까요?
너무 길어진 듯 하여 다음 포스팅으로 넘어갑니다 :^)