달력

5

« 2024/5 »

  • 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

1) 클래스에 virtual 함수들을 등록

bool onTouchBegan(Touch* touch, Event* unused_event); //터치의 시작과 동시에 호출

//얘만 bool형임을 명심할것

+ 이 함수에서 return 값을 false로 할 경우, Began호출 후 이후의 Moved와 Ended가 호출되지 않음.



void onTouchMoved(Touch* touch, Event* unused_event); //터치한 채로 움직이는 중에 호출

void onTouchEnded(Touch* touch, Event* unused_event); //터치한 손을 뗄 때 호출

//Touch* touch : 터치와 관련된 정보들(좌표값 등)

//Event* unused_event : cocos2d에서만 사용되던 것. cocos2d-x에서는 사용되지않고 ios로 포팅할 때의 틀만 가지고 있음

//+ onTouchCancelled : 예기치 못한 상황(어플호출로 화면이 바뀐다거나)으로 터치가 취소될 때 호출



2) 리스너에 함수들을 등록
//init에서 
//EventListenerTouchOneByOne - 싱글터치용 리스너
//EventListenerTouchAllAtOnce - 멀티터치용 리스너

Listener를 생성한 뒤, 해당 리스너가 받는 onTouchBagan, onTouchMoved, onTouchEnded에 함수를 등록시켜준다. 즉, 리스너가 위의 행위를 감지하면 등록된 함수가 호출되는 방식

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);

//onTouch함수들이 자동으로 인자를 2개를 받기때문에 CC_CALLBACK_2를 사용


+ 꼭 onTouchBegan과 같은 존재하는 함수만 가능한건 아니다.

사용자가 임의로 지정한 이름의 함수도 등록만 되면 똑같이 사용가능하다.


+ listener를 헤더에 있는 클래스 본체에 선언하여 사용하면, 화면전환등의 일이 일어났을 경우, 자동으로 리스너를 죽임과 동시에 이런저런 등록되어있는 것들 역시 일괄적으로 정리된다.



3) 이벤트 디스패쳐에 등록

Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

//Director를 통해, 리스너를 이벤트디스패쳐에 등록해준다.

//[addEvent...]는 눈에 보이는 레이어 순서대로 터치 이벤트를 처리하라는 뜻.



+ 메뉴(버튼)와 터치의 차이점

메뉴는 눌렀다가 뗐을 때 동작을 하게 됨.

터치는 눌렀을 때, 움직일 때, 뗐을 때마다 각각 동작을 지정해줄 수 있음.




2) 멀티 터치

bool onTouchesBegan(const std::vector<Touch*>& touches, Event* unused_event);

 //터치의 시작과 동시에 호출


void onTouchesMoved(const std::vector<Touch*>& touches, Event* unused_event);

 //터치한 채로 움직이는 중에 호출


void onTouchesEnded(const std::vector<Touch*>& touches, Event* unused_event); 

//터치한 손을 뗄 때 호출




:
Posted by 웽웽