2017년 1월 1일 일요일

Cocos2d-x 터치 이벤트

싱글 터치 이벤트
      // 싱글 터치로 리스너를 생성;
      auto listener = EventListenerTouchOneByOne::create();

      // 화면을 터치할 때 콜백되는 메소드 등록;
      listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); // 터치 시작;
      listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this); // 드래그;
      listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); // 터치 종료;
      listener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this); // 터치 취소;

      // 리스터를 EventDispatcher에 추가;
      Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 1); // 우선순위 숫자가 작을수록 먼저 이벤트 발생;

싱글 터치 이벤트 관련 함수
      virtual bool onTouchBegan(Touch *touch, Event *unused_event);
      virtual void onTouchMoved(Touch *touch, Event *unused_event);
      virtual void onTouchEnded(Touch *touch, Event *unused_event);
      virtual void onTouchCancelled(Touch *touch, Event *unused_event);
위와같이 4개의 가상함수가 있으며 상황에 따라 호출이 된다. *unused_event는 기존의 Cocos2d-x iPhone 버전과 형식을 같게 하기 위해 만든 매개변수이며 값이 전달되지 않는다.
onTouchBegan() 메소드만 리턴값을 가지고 있으며 리턴 값이 false인 경우 뒤의 메소드(onTouchMoved, onTouchEnded 등)는 호출되지 않는다.

터치된 영역의 좌표를 얻을 때
      Point location = touch->getLocation();


멀티 터치 이벤트
      // 멀티 터치로 리스너를 생성;
      auto listener = EventListenerTouchAllAtOnce::create();

      // 화면을 터치할 때 콜백되는 메소드 등록;
      listener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this); // 두번째 터치 시작;
      listener->onTouchesMoved = CC_CALLBACK_2(HelloWorld::onTouchesMoved, this); // 드래그;
      listener->onTouchesEnded = CC_CALLBACK_2(HelloWorld::onTouchesEnded, this); // 터치 종료;
      listener->onTouchesCancelled = CC_CALLBACK_2(HelloWorld::onTouchesCancelled, this); // 터치 취소;

      // 리스터를 EventDispatcher에 추가;
      Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 1); // 우선순위 숫자가 작을수록 먼저 이벤트 발생;

멀티 터치 이벤트 관련 함수
      virtual void onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event);
      virtual void onTouchesMoved(const std::vector<Touch*>& touches, Event *unused_event);
      virtual void onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event);
      virtual void onTouchesCancelled(const std::vector<Touch*>&touches, Event *unused_event);
위와같이 4개의 가상함수가 있으며 상황에 따라 호출이 된다.
멀티 터치 이벤트의 시작은 첫번째 화면의 터치 이후 다른 영역에 터치가 발생하면 onTouchesBegan()이 호출이 된다. 이때 터치에 관련된 정보가 vector로 저장이 된다.
onTouchesBegan()의 리턴값이 없다는것이 싱글 터치 이벤트와 다르다.


[Cocos2d-x 3 모바일 게임 프로그래밍] 의 내용을 정리.


댓글 없음:

댓글 쓰기