cocos2d-x 007 해상도 조절 (전체화면 모드와 윈도우 모드)

cocos2d-x 007 해상도 조절 (전체화면 모드와 윈도우 모드)

흑곰입니다. 느린 속도지만 c++로 게임 만들기에 도전하고 있습니다. cocos2d-x[코코스 투디 엑스]라는 엔진을 씁니다. 오늘은 해상도 조절하는 법을 배워봅니다.

개인적으로 제일 선호하는 방식은 윈도우 모드에, 창을 리사이즈하면 게임내 이미지 사이즈가 비례하여 조절되는 것인데요. cocos2d-x에서 쉽게 구현할 수는 없는 모양이고, 본 포스트에서는 생략합니다. 검색해보니 윈도우 리사이즈할 경우 특정 메서드를 call해서, 그에 맞게 그림을 다시 그려주는 방식으로 구현해야 하는 것 같습니다.

1. 기본값 (크기가 지정되지 않은 윈도우 모드)

cocos2d-x의 기본값은 윈도우 모드이며, AppDelegate.cpp 파일의 applicationDidFinishLaunching 메서드에 구현되어 있습니다.

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::create(“My Game”);
        director->setOpenGLView(glview);
    }

    // turn on display FPS
    director->setDisplayStats(true);

    … 중략 …

    return true;
}

2. 윈도우 모드(크기 지정)

코드를 아래와 같이 바꾸면 크기를 지정한 윈도우 모드가 됩니다.

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        // 윈도우 모드(사이즈 지정)
        glview = GLViewImpl::createWithRect(“My Game”, Rect(0, 0, 800, 600));
        director->setOpenGLView(glview);
    }

    // 윈도우 모드(사이즈 지정)
    glview->setDesignResolutionSize(800, 600, ResolutionPolicy::SHOW_ALL);

 
    // turn on display FPS
    director->setDisplayStats(true);

    … 중략 …

    return true;
}

3. 전체화면 모드

코드를 아래와 같이 바꾸면 전체화면 모드가 됩니다. 전체화면이라도 setDesignResolutionSize 메서드 인자에 해상도를 적어주어야 합니다. 그래야 특정 해상도에 맞게 전체화면 모드가 되니까요.

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        // 전체화면 모드
        glview = GLViewImpl::createWithFullScreen(“My Game”);
        director->setOpenGLView(glview);
    }

    // 전체화면 모드
    glview->setDesignResolutionSize(800, 600, ResolutionPolicy::SHOW_ALL);
 
    // turn on display FPS
    director->setDisplayStats(true);

    … 중략 …

    return true;
}

참고. ResolutionPolicy

참고로 ​ResolutionPolicy라는 단어가 계속 나오는데, 말 그대로 해상도 정책을 의미합니다. 해상도 정책은 5가지가 있으며 원하는 정책을 갖다 쓰면 됩니다.

아래 설명은 인자건 님의 <Cocos2d-x 3 모바일 게임 프로그래밍>에서 가져옴을 밝힙니다.

(관련링크 : https://blog.naver.com/injakaun/220030612962)

1. EXACT_FIT : 화면 비율을 고려하지 않고 무조건 입력한 게임 해상도에 맞춤

2. NO_BORDER : 화면 비율을 고려해 최대한 많이 보일수 있게 확대, 축소함 (화면이 짤려보임)

3. SHOW_ALL : 화면 비율을 고려해 모든 화면이 보일 수 있게 확대, 축소함 (검은색 여백이 생김)

4. FIXED_WIDTH : 화면의 너비는 게임 해상도로 고정하고 높이는 단말기 해상도에 따라 가변적임

5. FIXED_HEIGHT : 화면의 높이는 게임 해상도로 고정하고 너비는 단말기 해상도에 따라 가변적임