Game Programming/Game Engine

Cocos2d-x :: 3.x 터치 이벤트

VallistA2014. 7. 21. 17:34

Cocos2d-x 2.x 대 에서의 터치 이벤트 처리와 

Cocos2d-x 3.x 대 에서의 터치 이벤트 처리가 상당히 달라짐에 있어 게임을 개발하는데 참고 해야 될 것 같습니다.


달라진 소스를 한번 구경해보도록 합시다.


싱글 터치


<h 파일>


 virtual bool onTouchBegan(Touch* touch, Event* unused_event);
 virtual void onTouchMoved(Touch* touch, Event* unused_event);
 virtual void onTouchCancelled(Touch* touch, Event* unused_event);
 virtual void onTouchEnded(Touch* touch, Event *unused_event);

기존 소스에서와 크게 다른점은 보이지 않습니다. 그렇다면 cpp 쪽을 보도록 합시다.


<cpp 파일>


 init 함수

 auto listener = EventListenerTouchOneByOne::create();
 listener->setSwallowTouches(true);
 
 listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
 listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
 listener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this);
 listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
 
 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

기존과 상당히 달라진 점을 볼 수 있었습니다.

일단, CC_CALLBACK_2를 통해서 콜백으로 주고 받는 형식으로 변화 되었습니다.


나머지는 똑같이 cpp에 onTouchBegan등 h에 선언한 것과 똑같은 것으로 복사해서 넣어주면 됩니다.


값을 받는 법은 기존과 동일합니다.


 bool HelloWorld::onTouchBegan(Touch* touch, Event* unused_event){
 
    Point location = touch->getLocation();
    return true;
} 


요로코놈 받아주면 됩니다.

자 그러면 싱글터치가 있으면 멀티터치가 있듯 멀티터치를 알아보도록 합시다.


멀티 터치


<h 파일>

virtual void onTouchesBegan(const std::vector&touches, Event* unused_event); virtual void onTouchesMoved(const std::vector&touches, Event* unused_event); virtual void onTouchesCancelled(const std::vector&touches, Event* unused_event); virtual void onTouchesEnded(const std::vector&touches, Event *unused_event);


역시 특별히 달라진 것은 없습니다. (Vector 빼고)


 <cpp 파일>


init 함수

auto listener = EventListenerTouchAllAtOnce::create();
 listener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this);
 listener->onTouchesMoved = CC_CALLBACK_2(HelloWorld::onTouchesMoved, this);
 listener->onTouchesCancelled = CC_CALLBACK_2(HelloWorld::onTouchesCancelled, this);
 listener->onTouchesEnded = CC_CALLBACK_2(HelloWorld::onTouchesEnded, this);
 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);


값을 받는 방법을 봅시다.


 for (auto iter = touches.begin(); iter != touches.end(); iter++){
      Point location = (*iter)->getLocation();
      ...
    }

요로코놈 받아주면 됩니다.



댓글

댓글쓰기 폼

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.

자고 싶습니다. ㅠㅠ

페이스북    :: 링크
카카오톡    :: kingbye1
Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today : 19

Total : 414,365

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘