[COCOS2D-X] 2.x.x 버전으로 개발된 소스코드 최신버젼(4.0.x) 적용하기 Part2

 지난 글에서 Visual Studio Project를 생성하고 이전 소스 코드 및 resources 복사가 완료된 상태에서 이제 에러를 하나씩 잡아 나가야됩니다.

 

우선 코드 수정을 시작하기 전에 local git 생성을 해서 원본 상태를 기록하고 시작하는걸 추천 드립니다.

 

자, 준비가 되었으면 일단 컴파일을 한 번 시도해봅니다. 

저같은 경우에는 1251개 에러가 일단 보이는데, 하나 씩 수정 해보겠습니다.

 

 

1. Director 초기화 코드

 

[cocos2d-x 2.1.2]

// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());

winSize = CCSizeMake(800,480);
viewSize = CCEGLView::sharedOpenGLView()->getFrameSize();

// Set the design resolution
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(winSize.width, winSize.height, kResolutionNoBorder);

CCPoint	vOrigin = CCEGLView::sharedOpenGLView()->getVisibleOrigin();
CCSize vSize = CCEGLView::sharedOpenGLView()->getVisibleSize();
float scalex = winSize.width/viewSize.width;
float scaley = winSize.height/viewSize.height;

 

[cocos2d-x 4.0]

// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if (!glview) {
    glview = GLViewImpl::create("Mr Big Two");
    director->setOpenGLView(glview);
}

auto viewSize = glview->getFrameSize();
auto winSize = Size(800, 480);

// Set the design resolution
glview->setDesignResolutionSize(winSize.width, winSize.height, ResolutionPolicy::NO_BORDER);

 

2. 클래스명 변경

Visual Studio에서 Ctrl+H 를 눌러서 Project 내에 모든 파일에 대해 아래 문자들을 변경합니다.

 

cocos2d-x 2.1.2 cocos2d-x 4.0
CCApplication Application
CCAnimation Animation
CCAnimationCache AnimationCache
CCArray Vector
CCSize Size
CCPoint Point
CCRect Rect
CCObject Ref
CCNode Node
CCLayer Layer
CCSet Set
CCEvent Event
CCLabelBMFont::create Label::createWithBMFont
* Bitmap font 생성자 
CCSprite Sprite
CCMenuItemSprite MenuItemSprite
CCLog CCLOG
ccp Point
ccpAdd + 연산자 사용
ccc3 Color3B
ccc4 Color4B
CCDirector Director
CCDirector::sharedDirector() Director::getInstance()
unscheduleAllSelectors unscheduleAllCallbacks
CCHttpRequest HttpRequest
* httpclient header 추가 해줘야함

#include "network/HttpClient.h"
using namespace cocos2d::network;
CCHttpResponse HttpResponse
HttpRequest::kHttpPost HttpRequest::Type::POST
callfuncND_selector CC_CALLBACK_2
schedule_selector CC_SCHEDULE_SELECTOR
menu_selector CC_MENU_SELECTOR
CCString std::string
setTouchEnabled 사용되지 않음
CCString::createWithFormat StringUtils::format
SpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName SpriteFrameCache::getInstance()->getSpriteFrameByName
CocosDenshion::SimpleAudioEngine::sharedEngine() AudioEngine
void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::Event* event); virtual void onTouchesBegan(const std::vector<Touch*>& touches, Event* unused_event) override
void ccTouchesMoved(cocos2d::CCSet* touches, cocos2d::Event* event); virtual void onTouchesMoved(const std::vector<Touch*>& touches, Event* unused_event) override;
void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::Event* event); virtual void onTouchesEnded(const std::vector<Touch*>& touches, Event* unused_event) override;

 

대부분 CC prefix가 붙은 class 이름들의 CC를 제거해주면 됩니다. 대신 없어진 클래스들이 있기 때문에 이름 바꾸기 할 때 주의 하셔야합니다. CCString 이나 CCArray같은 클래스들은 표준 클래스들을 사용하도록 바꼈으니 잘 확인해서 바꾸시면 됩니다.

 

※. 참고로 v2.x.x에서 v4.x.x로 바꾸면서 가장 문제되는게 simple audio class가 없어지고 AudioEngine이라는 클래스로 바꿔야 하는데 이건 class 이름만 바꾸는걸로 해결이 안되고 전체적인 로직을 손봐야합니다. 최소한의 코드 수정을 원하신다면 v4보다는 v3.17.2로 마이그레이션 하는것을 추천드립니다.