일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- cocos2d-x
- 워드프레스
- flex
- c#
- 자동블로그
- 프로그램
- 쿠팡파트너스
- Ajax
- 가상서버
- 아두이노 강좌
- ChatGPT
- 자바스크립트
- vultr
- 자동글쓰기
- 챗지피티
- vps
- HTML
- 아두이노 초보
- 아두이노
- Javascript
- Php공부
- 자동포스팅
- 파이썬
- 웹
- Python
- 무료일러스트
- 그누보드
- 파싱
- 아두이노 기초강좌
- php
Archives
- Today
- Total
플밍
cocos2d-x 3.0 터치이벤트 정리 본문
cocos2d-x3.0에서는 터치이벤트 다루는 방법이 2.X 버전과 많이 달라졌다.
setTouchEnabled 함수가 deprecate 되고 EventListener 를 생성해서 dispatcher 에 등록하는 방법으로 바뀌었다.
인터페이스와 같은 사용방법이므로 모든 메소드를 구현해 주어야 한다.
#ads_1
1. 싱글터치 (타겟터치)
<helloworld.h>
class HelloWorld: public cocos2d::LayerColor{ //... 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); //... };<helloworld.cpp>
void HelloWorld::onEnter(){ //... auto listener = EventListenerTouchOneByOne::create(); // 핸들링된 터치 이벤트를 터치 이벤트 array에서 지우겠다는 의미이다. 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); //... } bool HelloWorld::onTouchBegan(Touch* touch, Event* unused_event){ Point location = touch->getLocation(); //..... return true; } void HelloWorld::onTouchMoved(Touch* touch, Event* unused_event){} void HelloWorld::onTouchCancelled(Touch* touch, Event* unused_event){} void HelloWorld::onTouchEnded(Touch* touch, Event* unused_event){}
#ads_2
2. 멀티터치 (스탠다드 터치)
<helloworld.h>
class HelloWorld: public cocos2d::LayerColor{ ... virtual bool onTouchesBegan(const std::vector<touch*>&touches, Event* unused_event); virtual void onTouchesMoved(const std::vector<touch*>&touches, Event* unused_event); virtual void onTouchesCancelled(const std::vector<touch*>&touches, Event* unused_event); virtual void onTouchesEnded(const std::vector<touch*>&touches, Event *unused_event); ... };
<helloworld.cpp>
void HelloWorld::onEnter(){ //... auto listener = EventListenerTouchAllAtOnce::create(); //listener->setSwallowTouches(true); //멀티터치이기 때문에 삼키면 안된다 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); //... } void HelloWorld::onTouchesBegan(const std::vector<touch*>&touches, Event* unused_event){ //... for (auto iter = touches.begin(); iter != touches.end(); iter++){ Point location = (*iter)->getLocation(); addNewSpriteAtPosition(location); } //... } void HelloWorld::onTouchesMoved(const std::vector<touch*>&touches, Event* unused_event){} void HelloWorld::onTouchesCancelled(const std::vector<touch*>&touches, Event* unused_event){} void HelloWorld::onTouchesEnded(const std::vector<touch*>&touches, Event* unused_event){}
#ads_3
Comments