cocos2d-x Windowsで画面最大にして、縦横比をスマートフォンに合わせる

Windowsで画面最大にして、縦横比をスマートフォンに合わせる

下記ソースでは、画面サイズ(ワーキングエリア)を取得し、

50ピクセル分マージンをとって比率を合わせたまま最大に拡大

 

AppDelegate.cpp

constexpr float designResolutionSize_width = 571;
constexpr float designResolutionSize_height = 900;

bool AppDelegate::applicationDidFinishLaunching() {
    Director * director = Director::getInstance();
    GLView * glview = director->getOpenGLView();
    if (!glview) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
        RECT WorkAreaRect;
        ::SystemParametersInfo(SPI_GETWORKAREA, 0, &WorkAreaRect, 0);
        float WorkWidth = (float)(WorkAreaRect.right - WorkAreaRect.left - 50);
        float WorkHeight = (float)(WorkAreaRect.bottom - WorkAreaRect.top - 50);
        Size NewWinSize;
        float designratio = designResolutionSize_width / designResolutionSize_height;
        if (WorkWidth / WorkHeight < designratio) {
            NewWinSize.width = WorkWidth;
            NewWinSize.height = NewWinSize.width / designratio;
        }
        else {
            NewWinSize.height = WorkHeight;
            NewWinSize.width = NewWinSize.height * designratio;
        }
        glview = GLViewImpl::createWithRect("TestGame", cocos2d::Rect(0, 0, (int)NewWinSize.width, (int)NewWinSize.height));
#else
        glview = GLViewImpl::create("TestGame");
#endif
        director->setOpenGLView(glview);
    }

    glview->setDesignResolutionSize((int)designResolutionSize_width, (int)designResolutionSize_height, ResolutionPolicy::SHOW_ALL);
    Size getDesignSize = glview->getDesignResolutionSize();

    director->setDisplayStats(false);
    director->setAnimationInterval(1.0f / 60.0f);
    director->setContentScaleFactor(designResolutionSize_width / getDesignSize.width);

    Scene* scene = TitleScene::createScene();
    director->runWithScene(scene);

    return true;
}

 

 タスクバーに格納して表示した場合にバグる問題が発生する。

その対応を記載する

 

タスクバーに格納して表示した場合にバグる問題が発生

cocos2d-x v3.11にある不具合

タスクバーから表示するとデザインサイズがスクリーンサイズで上書きされ

デザインサイズとスクリーンサイズを違うサイズで作ってる場合に不具合が発生する

該当箇所

\cocos2d\cocos\platform\CCGLView.cpp

void GLView::setFrameSize(float width, float height)メソッド内

    _designResolutionSize = _screenSize = Size(width, height);

を下記に修正する

    _screenSize = Size(width, height);
    if (_designResolutionSize.width <= 0.0F|| _designResolutionSize.height <= 0.0F) {
        _designResolutionSize = _screenSize;
    }

 

最新のcocos2d-x 3.13.1では修正されました

    _screenSize = Size(width, height);

    // Github issue #16003 and #16485
    // only update the designResolution if it wasn't previously set
    if (_designResolutionSize.equals(Size::ZERO) )
        _designResolutionSize = _screenSize;