scaleform.minarto.com

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

CLIK

scaleform 3&4 - 2 : CLIK 2/2

미나토 2011. 8. 28. 14:08

EventDispatcher 를 사용한(상속은 아니다... 오히려 위임에 가깝다고나 할까?) 무비클립을 상속받은 UIComponent 가 있고 그걸 상속 받은 Button class 들이 있다...

대부분 이녀석을 이용해 인터랙션을 처리한다...

var a:Number = 1;
var btn :Button;

a라는 숫자값이 있고 btn 이란 버튼이 있다고 치자... 버튼을 클릭했을 때 a를 출력하는 핸들러를 작성하고자 한다면...

as2의 버튼이라면 보통 다음과 같이 짠다


btn.onRelease = function():Void 
{
        trace(this._parent.a)


/////////////
1

as2 개발력(?)이 있는 친구들은 scope 문제 해결땜시 Delegate class 를 이용해 이렇게 짤 것이다.

btn.onRelease = Delegate.create(this, hnRelease);
function hnRelease():Void
{
        trace(a);



EventDispatcher 를 이용하면 다음과 같다.

btn.addEventListener("click", this, "hnRelease");
function hnRelease($:Object):Void
{
        trace(a);


자, as3와 거의 유사하지 않은가? 핸들러를 String으로 넣어줘야 한다는 것과, as3에서는 scope 인자가 없지만 as2에서는 인자를 직접 지정해줘야 하는 정도다. 불편할 것 같지만 scope도 직접 지정해 줄 수 잇으니, 직접 옵저버에게 던져줄 수도 있다...

물론  "click" 도 MouseEvent class를 만들어 상수값을 만들어MouseEvent.CLICK 라고 쓸 수도 있다...
(as2에서는 as3의 const 처럼 상수형을  만들 수는 없지만, 그냥 public static var 를 써서 만들어쓰면 되니깐...)



참고로 as2에서는 on으로 시작하는 class 이벤트 메소드 들이 많기 때문에 핸들러들의 접두어를 "hn"으로 붙였다... as3에서는 "on" 으로 붙이는 개발자 친구들이 많은데 as2에서는 기존 메소드와 혼동될 수 있고, 겹칠 수 있기 때문에 지양하는 것이 좋다고 생각한다.

마찬가지 이유로 private 를 뜻하는 코딩룰로서 _ 를 붙이는 친구들이 많은데 as2에서는 기본 속성(특히 무비클립)이 _가 붙는 것이 많아 혼선을 피하기 위해 __ 두개를 붙이기도 한다...
코딩룰로서 제한할까 했지만, 두개 쓰기는 너무 귀찮아... 자제하기로 했다... _ 는 알아서 주의하자



앞으로 이 EventDispatcher 만을 이용해 as3 프레임웍을 간단히 만들어보기로 하겠다.