Starling 은 게임(중에서도 모바일) 을 대상으로 만들어져있어 그런지 이벤트쪽 클래스들이 몇개 없다.
(이후 특별한 언급이 없으면 모든 클래스들은 동일이름의 표준 클래스가 아닌 Starling 의 클래스를 지칭함)
가장 중요한 이벤트는 역시 TouchEvent
EventIDispatcher 를 상속받은 클래스는 터치이벤트를 받는다. DisplayObject는 EventDispatcher 를 상속받는다.
고로 모든 표시객체는 터치이벤트를 받는다.
TouchEvent 클래스는 기존의 표준 TouchEvent와 상당히 다름에도 불구하고 이름이 같아 처음에 좀 헷갈린다.
TouchEvent는 아래와 같다.
TouchEvent 클래스의 이벤트종류는 딱 하나다.
두둥...
TOUCH_BEGIN,END,MOVE,OUT,OVER,TAP 이딴건 없다. 쿨하게 TOUCH 끝.
손으로 터치하든 문지르르든 마우스 클릭이든 심지어 마우스오버까지도 걍 TOUCH 하나로 종결
주목할것은 touches 라는 속성인데 현재 일어난 모든 터치에 대한 정보를 가진 Touch객체의 벡터다.
Touch 클래스는 터치이벤트에 대한 정보를 가지고 있다.
실제로 이객체를 통해서 방금일어난 이벤트가 "터치"인지 "드래그" 인지 "마우스오버" 인지를 판단한다.
그럼 손가락을 누르고 때고 움직이고 하는 다양한 상황에서 어떻게 원하는 이벤트에 해당하는 touch 객체를 찾느냐...
Starling은 touches 속성으로 얻은 벡터를 귀찮게 while과 for 를 통해 검사하지 않게 2가지의 메소드를 준비해주셨음.
target은 터치이벤트가 일어난 대상이다.
phase는 기존 표준 API의 GestureEvent의 phase와 비슷하다. Starling 에선 TouchPhase클래스의 상수로 정의되어있다.
종류는 아래와 같다.
살짝 바꼈긴 하지만
기존 표준 API의 GestureEvent 상수와 비슷하다.
개인적으로 Starling 쪽이 더 직관적인것같다.
언뜻보면 정체를 알수 없을지도 모를 상수가 2개있는데 HOVER 와 STATIONARY 이다.
HOVER : 눌러지지 않은 버튼에서 커서가 호버어쩌고 하는데 쉽게말하자면 마우스포인터가 오버된 상태를 말한다.
대체로 마우스오버라고 생각하면 되지만 마우스 포인터가 꼭 마우스로만 이동하지 않는다는 점을 고려만 하면
될것 같다.(터치펜등등)
STATIONARY : 손가락이나 마우스가 버튼을 누른상태에서 이전프레임이후로 이동하지 않은상태......뭔말이야 모르겠음;
어째든 이 getTouch 혹은 getTouches 메서드에 위 2가지 파라메터를 통해 로 원하는 Touch객체를 얻어낼 수 있다.
아래는 stage에서 일어난 Touch Move 즉 드래그에 관련된 Touch 객체를 얻는 코드이다.
addEventListener(TouchEvent.TOUCH,onTouchHandler);
private function onTouchHandler($e:TouchEvent):void{
var touches:Vector.<Touch> = $e.getTouches(stage, TouchPhase.MOVED);
}
Touch 클래스는 다음과 같다.
심플하다.
기존의 표준 TouchEvent를 적절히 2개의 클래스(TouchEvent,Touch) 로 나눈기분이다.
TouchEvent는 기존의 이벤트클래스구조에서 Touch 객체를 관리하는 Manager 기능을 추가된 느낌이랄까.
결국 큰 흐름은 대상에서 모든 Touch 관련 이벤트가 일어나면
'Starling' 카테고리의 다른 글
Starling - Introducing 번역 2 > Display List , Event Model , Touch Events (6) | 2012.10.31 |
---|---|
Starling - Introducing 번역 1 > 준비 (16) | 2012.05.05 |
Starling - 플래시 IDE에서 작업할경우 모바일 AIR3.2 에서 WMODE 에러 (0) | 2012.02.28 |
Starling - 참고사이트 (0) | 2012.02.24 |
Starling (0) | 2012.02.23 |