본문 바로가기
컴퓨터/cocos2d-x

cocos2d-x 3.x 에서 이벤트 드리븐(custom event)

by 김짱쌤 2015. 3. 10.

EventDriven

  1. 이벤트 드리븐 이해
  2. 이벤트 드리븐으로 클래스간 통신을 했을 때 장점
    • 불필요한 중간다리 클래스/커플링이 없어진다.
    • 실제 작동에 참여하는 클래스끼리 채팅하듯 주고받기 때문에 가독성이 더 좋아진다.

customEvent로 EventDriven구현 가능

  1. customEvent 통신 방법
//받는 쪽: 이벤트 리스너 등록.
cocos2d::EventListenerCustom* listener = cocos2d::EventListenerCustom::create("이벤트 이름", eventCallbackFunc);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

//보내는 쪽: 이벤트를 발사. 유저 데이터를 void*로 동봉할 수 있다. 등록안하면 자동 nullptr
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("이벤트 이름", (void*)userData);
  1. 이벤트 함수 등록할때 콜백함수 인자로 std::function을 사용한다. 예제에는 람다를 사용하지만 클래스 메소드를 사용하고 싶다면 참조 와 같이한다.

  2. 이벤트 디스패치할때 유저 데이터를 void*로 전송한다.

    • 기본 구조체등을 포인터로 사용하면 할당해제 문제가 있다.
    • cocos2d::Object(참조 카운트 자동 할당해제가 가능한)를 상속받은 클래스로 정보를 담고 그 주소를 void*로 캐스팅하여 넘겨준다.
    • cocos2d-x 외의 환경에서 void*로 정보 구조체를 넘길때는 unique_ptr을 활용하여 소유권 이전하는 방식을 택하면 좋겠다.


'컴퓨터 > cocos2d-x' 카테고리의 다른 글

cocos2d-x Socket-IO 활용  (0) 2015.03.10
WindowPhone 8 / 8.1 세팅  (0) 2015.03.10
cocos2d-x 의 기본 구조  (0) 2015.03.10