scaleform.minarto.com

무비클립을 만들지 마세요. 그룹에 양보하세요 본문

Scaleform Etc

무비클립을 만들지 마세요. 그룹에 양보하세요

미나토 2012. 6. 20. 11:43



0. 무비클립을 양산하게 되는 스케일폼 작업


스케일폼/플래시 작업을 하다보면 수많은 무비클립을 생성하게 됩니다.

특히 Flash IDE 로 콤포넌트 배치 작업을 많이 하게 되는 스케일폼의 워크플로우 특성상 무비클립이 생성되는 수는 일반적인 플래시 작업보다도 더 늘어나게 됩니다


리스트 속에 아이템렌더러가 있고, 그 리스트가 있는 곳에는 버튼이 있고, 그녀석은 또 하나의 컨텐츠로 윈도우에 들어가고... 뭐 그런식지요...


그런 작업을 하다보면 빠른 배치나 작업의 효율성 등을 위해 무비클립을 만들어내곤 합니다.

하나씩 하나씩 배치를 하다보면 노가다가 늘어나니, 무비클립 등의 심볼로 만들어서 배치를 하는거죠...


그런데 이게 다 메모리고, 퍼포먼스입니다.



자, 잠깐만 플래시의 컨테이너 구조를 살펴보죠.




1. 플래시의 컨테이너 구조


플래시는 일단 스테이지가 있습니다.

그리고 그 안에는 메인 디스플레이 오브젝트가 있습니다. Document Class 라고도 하고(정확히는 그 클래스로 생성된 객체), 누군가에게는 root 라고도 하죠...


그리고 그 안에는 또 많은 무비클립이 있습니다. (그래픽 심볼은 일종의 이벤트 캡처/버블링이 일어나지 않는 무비클립이라고 보셔도 무방합니다)


그런데 여기서 단어 선택이 중요합니다. 중요한 단어는 바로 "안에는" 입니다.


사람들이 보기에는 사실 "위에는" 아니던가요? 화면에 버튼이 있다면 화면 위쪽에 있는 거지 안에 감싸져 있는게 아니잖아요...


다만 관리적인 측면에서 아래쪽의 무비클립을 컨테이너라고 부르고, 그 안의 자식 디스플레이 객체라고 부르는 겁니다.

실제 렌더링 상의 관점으로 보면 그냥 위에 있는 디스플레이 객체일 뿐인거죠...


그렇다면 컨테이너라는 의미는 아무런게 아니냐고 한다면 그렇지가 않은게, 마우스 등의 이벤트 캡처링, 버블링이 일어나는 것에서 역할이 생깁니다


stage > 컨테이너 > 타겟 의 순서로 찾아들어가는 것이 캡처링이고 그 반대가 버블링이 일어나기 때문입니다.



하지만 그런식으로 이벤트가 발생되고 처리되다 보니 컨테이너는 성능을 떨어뜨리는 주요원인 중의 하나가 되어버립니다.

이벤트가 발생할 때마다 처리해야 할 것들이 늘어나게 되어버리는 거죠




2. Flash IDE 는 공부를 왜 안하나요


포토샵이든 플래시든 신 버전이 나오면 수십여가지의 신기능들을 가지고 나오게 됩니다.

달라진게 없으면 사람들이 살 일이 없을테니까요...


하지만 포토샵의 신기능이 나오면 그 기능을 쓰는 것과 달리 플래시는 새 버전이 나와도 딱히 플래시의 기능을 쓰지 않는 경우가 많습니다.

(뭐, 사실 디자이너들도 쓰던 포토샵 버전만 쓰는 경향이 강합니다만...)


actionscript 공부에만 매달리고, Flash IDE 의 기능들에 대해서는 잘 보려하질 않아요


플래시 개발자의 상당 수가 Flash IDE 를 실행조차 안시키는 경우가 많다는 사실을 아시나요? 그냥 빌더 같은데서 개발하는거죠...

그러다 보니 Flash IDE 는 잘 모르는 경우가 굉장히 많습니다.


그래서 Flash IDE 에서 사용할 수 있는 기능인 런타임 공유 기능도 잘 모르는 것이죠...


그리고 또 하나가 바로 그룹 기능입니다.



3. 그룹을 사용하자



사실 별거는 없습니다. 그냥 그룹으로 묶고 싶은 오브젝트들을 선택하고 그룹으로 묶거나 해제하면 되요





그런데 말이죠... 이런 이득이 있습니다...


그룹은 Flash IDE 상에만 존재합니다. fla 포맷 속에서만 존재한다는거죠... swf 상에서는 그냥 평범한 오브젝트 두개가 있는거예요

fla 상에서는 하나의 오브젝트로 있지만요...


trace(numChildren)로 찍어봐도 2가 나오지 1이 나오지 않는다는 거죠


이렇다 보니, 그룹으로 묶어 컨테이너처럼 활용해도 2번의 메모리나 성능 저하 문제가 발생하질 않습니다


구조를 위해 만든게 아닌 간단한 이동이나 배치의 편의를 위해서 무비클립으로 묶었던 것들은 그룹으로 처리하는 것이 훨씬 효율적이란 말입니다.



4. Flash IDE 를 잘 활용하면 떡이 나옵니다


나중에 포스팅 할건데... 

런타임 공유를 테스트 디버깅에 활용하는 법도 있습니다.

CS6 의 새 기능을 이용하여 렌더링도 최적화하는 방법도 있습니다... (이것도 한번 보여주고 싶은데 cs6 트라이얼이 만료되서리...)


음... 어쨌든 제가 말하고자 한걸 정리하자면...


1. 툴이 있다면 잘 활용하자... 왜 있는데 사용을 못하니...

2. actionscript 에만 매달리는 것은 플래시를 100% 활용하지 못하는 거다

3. Flash IDE 는 디자이너만 쓰는 거라고 생각하는 이상한 플래시 개발자가 꽤 많다


뭐 이런 말을 하고 싶었는데... 3번은 전달력이 약한듯 하네요 :^)