scaleform.minarto.com

4.0.15 에서 변경된 API 에 따른 Button의 Event Bubbling 변화 본문

Scaleform

4.0.15 에서 변경된 API 에 따른 Button의 Event Bubbling 변화

미나토 2012. 5. 15. 17:34


음... 다시 블로그를 재개해보려고 합니다.


사실 글은 꾸준히 써놨어요. 지금 발행대기 중(?) 이 글 말고도 7개 정도가 더 있네요...

다만 그동안의 랜덤이 아닌 매주 월요일 아침에 꾸준히 올리려고 좀 모아놨었지요... 블로그 운영 스타일을 바꿔보려고 했달까요?


근데 오늘은 아침에 아이맥스 들려서 박쥐남자를 보고 와서리 늦었네요... ㅎㅎㅎ


뭐 어쨌든 각설하고...


UDK 5월 버전이 나왔습니다 http://www.udk.com/news-beta-may2012.html (이 글을 썼던 시점이 5월 15일이니까요...ㅋㅋㅋ)

UDK 5월 버전에 통합된 스케일폼 버전은 다음과 같습니다



gfx 플레이어 4.0.16

AMP 4.0.14

CLIK 4.0.15 (C:\UDK\UDK-2012-05\Development\Flash\AS3\CLIK\Release_Notes_4_0_15.txt 이 파일을 보고 판단한겁니다)


그런데 이 Release_Notes_4_0_15.txt 문서를 보면 재밌는게 있습니다.


Class / API Changes:

Moved _owner and get/set owner from ListItemRenderer to Button so that Button can use them for ButtonBar.


ListItemRender 클래스의 owner 속성이 상위클래스인 Button 클래스로 옮겨간 것입니다. 

(문서상으로는 그렇지만 UDK 3월 버전의 4.0.14 부터 이미 옮겨져 있었습니다... UDK 1월 버전의 CLIK 에는 Button 쪽에 있었습니다)


as3 버전만 해당되고, as2 버전은 여전히 ListItemRender 쪽에 있습니다.

그리고 owner 의 데이터 형도 바뀌었습니다. as2 의 owner 는 CoreList 로 선언되어 있었지만, as3 의 owner 는 UIComponent 로 바뀌었죠...


어차피 상위클래스로 위치를 옮겼고, 상위 클래스로 선언되어 있으니 하위호환에는 문제가 없습니다만...


이 변경으로 인해서 작법 또한 변경될 수 있음을 알아두셔야 합니다.


다음과 같은 예를 보죠...


샘플을 기준으로 한 Button 은 보통 Window 안에 들어있는 content(as2 에서는 form) 안에 존재하게 될겁니다. 다음과 같겠죠...

Window.content.Button

이렇게 바로 content 안에 있음 다행이지만 UI를 만들다 보면 몇번의 컨테이너를 더 거쳐야 하게 될 수 있죠... 

Window.content.m.list.canvas.Button

뭐 이런 식으로요...


그런데 클라이언트가 바로 Button 을 direct access 로 접근한 상황이 아닌 이상...

보통 Window 만 접근했다면 Button, canvas, list, m, content 모두 addEventListener 를 통해 강제로 이벤트 버블링을 하듯이 짜는 경우들이 있습니다


원래 보통은 이런 식으로 이벤트 핸들링을 최적화해야 합니다

http://blog.jidolstar.com/230


위와 같이 이벤트 전파를 최적화하기 힘들다면 Button의 이벤트를 Window 로 바로 처리하려면 무언가 코드를 고쳐야 합니다.


저같은 경우는 전부터 버튼에 window 라는 속성을 만들어 사용했었는데요... 그럼 다음과 같이 구현이 되죠...


as3 : Button.addEventListener(CLIK, window.dispatchEvent);

as2 : Button.addEventListener(CLIK, window, "dispatchEvent");


이런 식으로 바로 가능한거죠...


그런데 이럴 필요가 없어졌습니다.


owner 가 public 속성이고 CoreList 도 아니니 윈도우를 바로 직접 줄 수 있죠...


owner 을 제 방식대로 사용하면 이벤트 전파 최적화에 사용할 수 있단 말이죠...



사실 이 글은 마우스/키보드 인터랙션 최적화 글을 쓰려다가 UDK가 업데이트 되어서 살짝 껴놓은 글입니다.


이벤트 캡처링, 버블링 최적화에 대해서 써야하는데... 좀 어긋났네요...