Understanding the C++ Sample Application – 4. Listener 클래스 서브클래싱하기
원문과 원문에서 가져와 본 글에 사용한 영상 및 기타 자료들의 저작권은 Leap Motion에 있습니다.
Listener 클래스 서브클래싱하기
예제 프로그램에서는 Leap::Listener 서브클래싱한 SampleListener를 정의하여 사용하고 있습니다. Leap으로부터 뽑아온 이벤트를 처리하는 콜백함수가 구현되어있죠. 이벤트는 아래를 포함합니다.
- onInit - 딱 한번 발생하는데, controller에 등록된 listener가 초기화되었을 때 발생
- onConnect - controller에 Leap이 연결되고, 모션 추적 데이터를 보낼 준비가 되었을 때 발생
- onDisconnect - controller가 Leap에서 분리될 때
- onExit - listener가 controller에서 제거될 때
- onFrame - 새로운 프레임이 들어왔을 때
라이프 사이클과 관련된 3가지 이벤트 콜백 함수(onInit, onDisconnect, onExit)가 발생하면 예제 프로글매은 표준 출력으로 메시지를 뿌리게 되어있습니다. 또한 onConnect가 발생하면 모든 제스쳐 타입을 인식할 수 있도록 활성화시킵니다. 마지막으로 onFrame 이벤트에 대해서는 가장 최근 프레임 데이터를 가져와서 인식된 물체에 대한 정보를 출력하도록 합니다.
SampleListner 클래스의 소스를 아래에 싣습니다. 구현에 참고가 될 것입니다. onFrame 함수의 내용은 이어지는 글에서 살펴볼 것이므로 생략하도록 하겠습니다.
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 32 33 34 35 |
class SampleListener : public Listener { public: virtual void onInit(const Controller&); virtual void onConnect(const Controller&); virtual void onDisconnect(const Controller&); virtual void onExit(const Controller&); virtual void onFrame(const Controller&); virtual void onFocusGained(const Controller&); virtual void onFocusLost(const Controller&); }; void SampleListener::onInit(const Controller& controller) { std::cout << "Initialized" << std::endl; } void SampleListener::onConnect(const Controller& controller) { std::cout << "Connected" << std::endl; controller.enableGesture(Gesture::TYPE_CIRCLE); controller.enableGesture(Gesture::TYPE_KEY_TAP); controller.enableGesture(Gesture::TYPE_SCREEN_TAP); controller.enableGesture(Gesture::TYPE_SWIPE); } void SampleListener::onDisconnect(const Controller& controller) { // 디버거에서 실행 중일 때는 발생하지 않음 std::cout << "Disconnected" << std::endl; } void SampleListener::onExit(const Controller& controller) { std::cout << "Exited" << std::endl; } void SampleListener::onFrame(const Controller& controller) { // 가장 최근 프레임을 얻어와 정보를 출력한다. (생략) } |
앞에서 생성한 controller와 onFrame의 속은 비었지만 만들어진 SampleListener를 이용하면 이벤트가 발생을 눈으로 확인할 수 있습니다. onFrame 안에다가 cout 한줄만 대충 써 넣으시면 onInit 이벤트와 접속이 될 때의 onConnect, 매 프레임마다 들어오는 onFrame, 종료 시 onExit 를 모두 출력 창에서 확인할 수 있습니다.