EventDriven
- 이벤트 드리븐 이해
- 이벤트 드리븐으로 클래스간 통신을 했을 때 장점
- 불필요한 중간다리 클래스/커플링이 없어진다.
- 실제 작동에 참여하는 클래스끼리 채팅하듯 주고받기 때문에 가독성이 더 좋아진다.
customEvent로 EventDriven구현 가능
- customEvent 통신 방법
//받는 쪽: 이벤트 리스너 등록.
cocos2d::EventListenerCustom* listener = cocos2d::EventListenerCustom::create("이벤트 이름", eventCallbackFunc);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
//보내는 쪽: 이벤트를 발사. 유저 데이터를 void*로 동봉할 수 있다. 등록안하면 자동 nullptr
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("이벤트 이름", (void*)userData);
이벤트 함수 등록할때 콜백함수 인자로 std::function을 사용한다. 예제에는 람다를 사용하지만 클래스 메소드를 사용하고 싶다면 참조 와 같이한다.
이벤트 디스패치할때 유저 데이터를 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 |