scaleform.minarto.com

scaleform 3&4 - 4 : MouseEvent 2/ 2 본문

Scaleform

scaleform 3&4 - 4 : MouseEvent 2/ 2

미나토 2011. 8. 30. 22:07

stage 의 Mouse 핸들러를 통해 currentTarget 를 알아냈다면, 이벤트 발생은 간단하다


var current Target:UIComponent;
 currentTarget.dispatchEvent(new MouseEvent(MouseEvent.CLICK, this, currentTarget));
(실제 dispatchEvent 는 private 이기 때문에, 래핑해서 다른 메소드로 dispatchEvent 를 해주는 것이 낫다)


이렇게 하면 gfx.controls.Button 을 상속받지 않고도 똑같이 "click" 이벤트를 발생시킬 수 있다....
물론 이벤트 객체를 만들어야 하는 비용이 소모되지만 UI특성상 계속해서 인터랙션이 일어난다는 걸 생각해본다면 딱 한개만 미리 만들어놓고 계속해서 재활용해도 된다


각설하고 이게 기존 gfx.controls.Button 방식과 머가 차이가 나느냐~ 하면, 기존에는

1. 마우스 이벤트를 걸면 그 순간 하위객체는 마우스 인터랙션이 일어나지 않는다.
2. 그렇기 때문에 컨테이너는 버튼으로 써서는 안되고, 따로 영역객체를 만들어야 한다... 이건 곧 자원의 낭비
3. 마우스 이벤트를 모든 객체에서 직접 따로 처리하니 이것 또한 자원의 낭비

가 되시겠다...

위와 같이 처리하면 1~3 이 모두 해결된다... (단, rollOver 와 rollOut 은 scaleform Mouse class 에서 처리하지 못하니 두가지 이벤트 이외의 이벤트를 처리할 곳에만 사용하는 것이 낫다)

UIComponent 에(scaleform의 UIComponent 말고 직접 만들었다면) as3 의 mouseChildren, mouseEnabled 속성을 추가하여 동작시킬 수도 있으니... 이또한 더욱 as3와 같아진다...


MouseEvent 는 이정도면 됐고, 다음에는 KeyboardEvent 로 넘어가시겠다...