cocos2d-x 프레임워크 최상단에는 Ref 클래스가 존재한다.
Ref 클래스는 모든 오브젝트들의 최상위 부모 클래스로, cocos2d-x의 autorelease pool에 의해 관리된다.
Node 클래스는 화면상에 표시될 수 있는 클래스로, Ref 클래스를 상속받으며 Tree 구조를 이루며 서로 참조한다.
(Sprite 클래스도 Node 클래스의 자식이다.)
그런데, 지금까지 기능 모듈을 개발할 때 addChild등을 이용하기 위해 Node 클래스를 상속받아 구현했었는데, 알고 보니 cocos2d-x에도 Component 클래스라는 것이 있었다!!
언리얼엔진4에서는 Node에 대응하는 것이 Actor인데, Actor에 ActorComponent라는 기능 모듈을 붙였다 떼었다 하는 방식으로 모듈형 프로그래밍을 할 수 있었다.
cocos2d-x에서는 안되는줄 알았는데 Component클래스라는 것이 있다는 걸 알고 지금까지 Node를 상속받아서 구현했던 기능 모듈들을 Component로 뜯어고쳤다.
사용법은 크게 달라질 것이 없는데, 모듈을 붙이고자 하는 클래스에 AddChild() 대신 AddComponent()하면 끝(;;).
class UnitState : public Component { public: virtual void StartState(Unit* unit) = 0; virtual void RunState(Unit* unit) = 0; virtual void EndState(Unit* unit) = 0; };
기존에 Node를 상속받아서 만들었던 State클래스를 Component로 바꿔주었다.
void Unit::changeState(UnitState* state) { if (_state) { this->getState()->EndState(this); this->removeComponent(_state); } this->setState(state); this->getState()->StartState(this); this->addComponent(state); }
이렇게 붙여서 reference count를 자동으로 관리할 수 있다.
'엔진 > Cocos2d-x' 카테고리의 다른 글
cocos2d-x 안드로이드 빌드시 C++ 14 적용하기 (0) | 2016.05.23 |
---|---|
이해할 수 없는 cocos2d-x의 사운드 기능 (2) | 2016.05.14 |
cocos2d-x 3.x 멀티 해상도 대응하기 (multi resolution) (0) | 2016.04.12 |
Cocos2d-x 프로젝트 생성 (0) | 2016.03.24 |