블로그 이미지
플래시 개발자랍니다... 하지만 여긴 플래시 전문 블로그가 아닌 그냥 개인 블로그랍니다
미나토

Recent Comment

calendar

        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 29 30 31
  • 40,987total
  • 8today
  • 22yesterday
2008/01/07 14:05 Flash Platform




Document class 에서 상속 받았던 Sprite 클래스는 DisplayObjectContainer > InteractiveObject >DisplayObject > EventDispatcher > Object 를 상속 받게 됩니다.

DisplayObject 는 플레이어 상에서 눈에 보이는 모든 놈들이라고 생각하시면 됩니다. EventDispatcher 를 상속받음으로서 addEventListener 와 dispatchEvent 를 통한 이벤트 모델을 쉽게 만들 수 있습니다.

InteractiveObject 는 그중에서도 마우스와 키보드 이벤트를 받을 수 있는 놈들입니다. flash  상의 그래픽 심볼 클립이랄 수 있는 Shape 클래스와 Static 텍스트 필드인 StaticText  는 InteractiveObject 의 자식놈이 아니라 불가능 합니다. 그래픽 심볼과 Static 텍스트 필드는를 액션을 줄 수 없는 것은 같은 이유입니다. (제 설명이 좀 이상할 지 모르겠는데 뭐, 어쨌든 그렇습니다. 더이상은 제 능력 밖이라... ㅡ.,ㅡ)

다 레퍼런스에 있는 내용입니다. 전 레퍼런스보다 더 잘 설명해줄 능력이 없답니다...ㅡ.,ㅡ


Sprite 는  쉽게 이해하자면  2.0의 Movieclip 클래스에서 타임라인이 빠진 녀석입니다.


흔히 2.0 에서 개발자들은 원프레임  어플리케이션이라고 명하는 타임라인을 전혀 쓰지 않는  어플들을 만들어왔습니다.  타언어에서 넘어온 개발자들에게는  타임라인이라는  녀석을 전혀 이해할 수 없었음이 가장 큰 이유였죠. MM 에서는 그래서 폼어플리케이션이라는 새문서까지 만들어내는 생각해보면 참 쓸데없는(?) 짓까지 하게됐죠.(새 문서 하면 나오는 그녀석 말입니다)
플래시를 조금 더 이해한 분들은 추가 프레임을 적절히 섞어가며 좀 더 효율적인 개발을 하였지만 실상은 그랬죠.

그런 분들이 만들어낸 어플들의 라이브러리를 열어보면  무비클립은 있되  모두 하나의 프레임만을 가졌죠.

Sprite  가  바로 그녀석이라고 생각하시면 됩니다. 물론 태어난 이유는 위 설명과 달리  무비클립의 다이어트를 위해서지만  그냥 이해하시기 쉬우시라고요...


앞으로 개발하실 분들이 만질  새로운 무비클립은  Sprite  라고 생각하시면 되겠습니다.  (무비클립은  Sprite  자식놈으로 따로 있습니다)


무비클립이 그랬듯 Sprite 는 속에 다른 그래픽 객체들을 넣을 수 있습니다. 그 부분이 DisplayObjectContainer 클래스입니다. MovieClip.attachMovie 가 DisplayObjectContainer.addChild  로 바뀌긴 했지만요.

하지만 약간 개념이 다릅니다.
attachMovie 가 삽입의 개념이라면 addChild는 추가의 개념입니다. 오히려 attachMovie 는 addChildAt 에 가깝죠.


2.0의 무비클립은 타임라인이라는 시계와 Depth 라는 고층 건물을 가지고 있었는데 반해 DisplayObjectContainer 는 그것들이 모두 사라졌습니다.

Depth 라는 고층 건물이 있었던 무비클립은 사람을 아래층에 사람이 있건 없건 12층에 넣는 것이 가능했습니다만 수위실만 있고 건물은 없는 DisplayObjectContainer 는 건물이 그것이 불가능합니다. 다만 수위실에서 누가 몇번째로 건물에 들어갔는지만 체크할 뿐입니다. 들어간 녀석들은 먼저 들어간 녀석들 등에 업혀있습니다.

사이에 있는 녀석을 쏙 빼버리면 위에 업힌 놈은 밑으로 툭 떨어져 버립니다. 단지 index 라는 순서의 개념만 남게된겁니다.



말이 계속 길어지기만 하니 많이 사용할 놈만 쳐다보죠.
많이 보셨던 2.0 > 3.0 마이그레이션 과는 약간 다를 겁니다. 그녀석은 이론용이고 다음건 실무용 마이그레이션이랄까요... 레퍼런스에 있는걸 제가 또 설명할 필요는 없으니까요.

2.0 > 3.0

createEmptyMovieClip > new Sprite + (addChild, addChildAt)
attachMovie > addChild, addChildAt
removeMovieClip > removeChild, removeChildAt
swapDepth > swapChildren, swapChildAt, setChildAt, setChildIndex
getNextHighestDepth > numChildren



많이 길어졌으니 이번 강좌는 여기까지...



p.s. 늘 그렇듯 오타는 책임지지 않습니다...ㅡ.,ㅡ
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 미나토
2007/06/08 17:50 Flash Platform

뭐 아는 사람은 다 아는 거겠지만... removeChild 메소드 사용시 자주 나올 수 있는 실수를 짚고 넘어가자면...


var sp:Sprite = new Sprite();
addChild(sp);

trace(sp); // [object Sprite]

removeChild(sp);
trace(sp); // [object Sprite]

sp = null;
trace(sp); // null;


위와 같이 removeChild 는 디스플레이 오브젝트에서 빼낸 것 뿐이지 sp라는 Sprite 객체를 완전히 삭제해 버린 것이 아니다.

다음의 코드도 보자

var sp:Sprite = new Sprite();
addChild(sp);
trace(sp); // [object Sprite]

sp = null;
trace(sp); // null;

sp = Sprite(getChildAt(0));
trace(sp); // [object Sprite]

이제 감이 좀 올 것이다.

안 오면 말고...ㅡ.,ㅡa

 

크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 미나토
2007/06/04 11:01 Flash Platform

var sp1:Sprite = new Sprite();
addChild(sp1);
var sp2:Sprite = new Sprite();
addChild(sp2);
sp2.y = 400

var shape:Shape = new Shape();
shape.graphics.beginFill(0xFFFF00);
shape.graphics.drawCircle(0, 0, 200);

sp1.addChild(shape);
sp2.addChild(shape);


두개의 DisplayObject 클래스를 화면에 올려놓고 또하나의 DisplayObject  클래스를 만들어 집어넣어보았다.

그냥 단순한 생각으로는 두군데 모두 들어가야 맞다고 생각했으나 그게 아니었다. DisplayObject 클래스에는 clone 메소드도 없으니 결국 new 로 새 DisplayObject 를 생성해야 한다.

sp1 과 sp2에서 shape 를 참조하는게 아니라 shape 에서 자신이 addChild 된 DisplayObject 클래스를 찾는 것일까?


생각해 볼 문제다.
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 미나토