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(); ... }
요로코놈 받아주면 됩니다.
'Game Programming > Game Engine' 카테고리의 다른 글
Unity3D :: 게임 최적화 기법 (14) | 2015.02.16 |
---|---|
Cocos2d-x :: Font 한글 출력 문제 (한글 깨짐) (cocos2d-x 2.x , 3.x) (4) | 2014.07.21 |
Cocos2d-x :: 3.x 대와 2.x의 차이점 및 변경점 (0) | 2014.07.04 |
cocos2d-x :: Couldn't find the gcc toolchain (0) | 2014.07.04 |
Cocos2d-x :: Android 음악 최대 출력 갯수 변경 in SoundPool (0) | 2014.06.13 |
댓글
VallistA
병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!
자고 싶습니다. ㅠㅠ
Github :: 링크
궁금한점 문의 주시면 답변드리도록 하겠습니다
VISITED
Today :
Total :
Lately Post
Lately Comment