안녕하세요. 온새미입니다. 오랜만에 코코스에 대한 주제로 포스팅해보는데요, 제목에 써있는 것처럼 Cocos2d-x 의 2.x 와 3.x 의 차이점을 지금까지 써보면서 느낀 것을 나열해보는 시간을 가져볼까 합니다. 절대로 제가 지금 Microsoft Visual Studio 2013 Update 1 의 진행이 더뎌서 시간이 남아서 하는 것이 아닙니다 (...)
1. C++ 11 적용
C++ 의 최신 버전인 11 을 Cocos2d-x 에 적용했습니다. 그래서 C++ 11 에 추가된 기능인 lambda 를 쓸 수 있게 되었네요. 이것이 무엇을 의미하느냐,
// header ... void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); ... // source .. void HellWorld::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) { ... } ...
기존의 위의 코드처럼 쓰던 것을 아래처럼 쓸 수 있다는 것이죠. 이것이야말로 혁ㅋ명ㅋ
// source ... void HellWorld::init() { ... auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); listener->onTouchBegan = [](Touch *touch, Event *event){ ... }; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); ...
저렇게 쓸 수 있게 됨과 동시에 기존에 ccTouches... 로 시작하던 터치 이벤트들이 좀 더 명확하게 정리가 된 것 같습니다. 저번에 참석했던 Cocos2d-x 포럼에서 Zhe Wang Cocos2d-x Founder 가 말하길, "이 터치 시스템을 뜯어고치려고 매우 예전부터 생각해왔는데 이제라도 바꿔서 정말 좋다" 고 말한게 기억나네요.
2. CCxxx -> xxx
CC로 시작하던 모든 Cocos2d-x 관련 클래스나 함수들이 CC를 지우고 새롭게(?) 태어났습니다.
CCSprite *sprite1 = CCSprite::create(); // deprecated Sprite *sprite2 = Sprite::create(); auto sprite3 = Sprite::create();
auto 는 11 버전부터 추가된 것인지는 잘 모르겠습니다만 유용하네요 ㅋ 컴파일러가 고생할 뿐 프로그래머는 걍 후리면 그만이군요.
3. sharexxx() -> getInstance()
Cocos2d-x 에서 싱글턴 클래스에 접근하려면 썼던 키워드가
CCDirector::shareDirector();
와 같은 형식이었는데, 이제 아래처럼 통일되었습니다.
Director::getInstance() TextureCache::getInstance(); FileUtils::getInstance(); SpriteFrameCache::getInstance(); ...
4. CCTextureCache -> TextureCache -> ?
2.x 에서는 CCTextureCache::shareTextureCache() 로 싱글턴의 TextureCache 를 가져왔는데, 3.0alpha 까진 TextureCache::getInstance() 라고 썼는데, 이번에 Director 에 통합되었습니다.
CCTextureCache::shareTextureCache(); // deprecated TextureCache::getInstance(); // deprecated Director::getInstance()->getTextureCache();
5. Hardware Keyboard Support
2.x 까지는 생각도 못했던 PC 에서의 키보드 입력을 3.x 에서 할 수 있게 되었습니다! 유레카!
그래서 이전과 다르게 약간의 코드만 추가한다면 PC 에서도 편하게 게임 테스트가 가능하게 되었습니다. 제가 이 테스트가 불편해서 ThinkPad Twist 를 산 것도 없진 않은데, 이렇게 화끈하게 지원해주니 이거 왜샀나 싶네요 (...) 사용법은 위에 서술한 람다부분에서 약간만 고치면 됩니다.
auto listener = EventListenerKeyboard::create(); listener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event *event){ log("%d press", keyCode); }; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
위에 _eventDispatcher 에 있는 SceneGraphPriority 부분은 두가지가 있는데, 자세한건 홈페이지에서.
쓰고나서도 프로그래스바가 진행이 안되서 걍 껐다고 합니다 (...) 업데이트는 자고나서 하는 걸로.
'Study > Engine' 카테고리의 다른 글
Cocos2d-x 3.3rc0 에서의 cocos command의 run(or compile) 에러 시 '임시' 대처법 (0) | 2014.11.12 |
---|---|
[Cocos2d-x] Windows RT (WinRT) 로 포팅 시 주의해야할 점 (수정) (0) | 2014.01.12 |
응...? Cocos3D 요? (0) | 2013.11.14 |
cocos2d-x 에서 키보드 쓰기? (0) | 2013.07.19 |
드디어 한국에도 cocos2d-x 관련 서적이 등장했군요! (0) | 2013.03.31 |