scaleform.minarto.com

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

CLIK

scaleform 3&4 - 1 : CLIK 1/2

미나토 2011. 8. 28. 13:52


CLIK 컴포넌트라고 해서 처음엔, 버튼 컴포넌트를 만들어놓고 그렇게 부르나 했다...
(실제 버튼위주의 컴포넌트가 많이 있다)

CLIK 은 Common Lightweight Interface Kit 의 약자로 gs스키너에서 만든 프레임웍의 명칭일 뿐이다...

 
아무래도 UI 미들웨어다 보니 디자인 작업이 많아 컴포넌트를 제공하여, GUI단에서 작업하기 쉽도록 해놓은 것이다...


그러다 보면 쓸데 없는 기능도 많이 들어있기 마련이지만 gs 그룹의 이름이 허명이 아니듯 꽤나 잘 만들어놓았다... 예전 mx시절에 어도비에서 제공해주던 무겁기만 한 컴포넌트를 생각하지는 않아도 된다...
(사실 이런 생각이 만연해 있다보니 나같은 경우는 컴포넌트를 좀 살펴보기만 했지, 만들어 작업해본 적이 없다)


실질적으로 중요한 것은 gfx.events.EventDispatcher class 이다. as3의 flash.events.EventDispatcher 와 같은 역할을 하는 녀석인데 이 녀석을 통해 as3의 addEventListener / removeEventListener 를 as2에서도 사용할 수 있게 해놨다.

(거의 똑같지만 as2의 scope 문제 때문에 addEventListener($eventType:String, $scope:Object, $handler:String):void 가 된다... as3의 버블링등이 빠지고, scope 가 추가되었다고 생각하면 된다)


as3는 대부분의 녀석들이 저녀석을 상속 받지만 as2는 아시다시피 대두분 MovieClip 를 상속받다보니 EventDispatcher 의 서브클래스로서 동작하는 것은 아니고, 무비클립이 dynamic class 인 것을 이용하여 위의 메소드들을 붙여서 활용하게 된다.

관리는 싱글턴 형태로 EventDispatcher 하나가 모든 이벤트를 관리해주니 어느 정도 효율적인 관리도 가능하다



as3처럼 flash.events.EventDispatcher 의 서브클래스를 만들려면


public var addEventListener:Function;
public var removeEventListener:Function;
public var hasEventListener:Function;
public var removeAllEventListeners:Function;
private var cleanUpEvents:Function;

private var dispatchEvent:Function;

이렇게 클래스 변수로 함수를 만들어놓고, 생성자에 다음의 구문을 써주면 된다

EventDispatcher.initialize(this); 


이러면 이제부터는  addEventListener 를 사용할 수가 있다...

as3와 완벽히 똑같진 않은 것이  주의 할 건 dispatchEvent:Function의 접근자가 private 인 것이다. as3와 접근자가 달라 헷갈린다면 바꿔서 쓰는 것도 한 방법이겠으나...
엔진이 업데이트 되면 또 다시 바꿔주고 하는 경우가 있다보니 나같은 경우는 래핑 클래스를 하나 더 만들어 public function dispatchCustomEvent 라고 만들어서 쓰고 있다... 


첨부한 파일은 as3의 flash.utils.Timer class 를 as2로 만들어놓은 것이다... 보면 as3와 거의 유사하게 사용할 수 있다는 것을 알 수 있을 것이다...

CEventDispatcher.asEvent.asICustomDispatch.asTimer.asTimerEvent.as
회사일과 연관된지라 소스를 전부를 올릴 수는 없고, 예제 정도의 수준으로 보시면 될 듯...