いぬでもわかる

iOSやCocos2dxが好きでときどきAndroid。できるだけ毎日何かしら書く事を目標に頑張る。

cocos2dxで複数画面サイズに対応する

前回の記事で、リソースファイルの読み込み方について説明しましたが もう少しそれを発展させて様々なディスプレイサイズで動作するようにコードを書いていきます。

AppDelegate::applicationDidFinishLaunching

// directorの初期化
CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

pDirector->setOpenGLView(pEGLView);

//retina ipad用にサイズを設定
CCSize designSize = CCSize(2048, 1536);

//設定したサイズを縦横比を保たず画面サイズに合うように拡大/縮小表示
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width, designSize.height, kResolutionExactFit);

CCSize screenSize = pEGLView->getFrameSize();
//画面サイズに合わせてリソースファイルパスを設定する
if (screenSize.height > 768) {
    searchPaths.push_back("ipadhd");
    fileUtil->setSearchPaths(searchPaths);
} else if (screenSize.height > 320) {
    searchPaths.push_back("ipad");
    fileUtil->setSearchPaths(searchPaths);
} else {
    searchPaths.push_back("iphone");
    fileUtil->setSearchPaths(searchPaths);
}

CCEGLView::setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)

第三引数に設定するResolutionPolicyには3つの値を設定できます。 kResolutionExactFit 画面の比率と第一引数と第二引数に渡したサイズの比率が異なっても画面一杯に引き延ばされます。

kResolutionNoBorder アスペクト比を保って余白無しに画面サイズ一杯に表示されます。 画面の比率と第一引数と第二引数に渡したサイズの比率が異なった場合、一部表示されない部分が発生します。

kResolutionShowAll アスペクト比を保って余白有りで画面サイズ一杯に表示されます。 画面の比率と第一引数と第二引数に渡したサイズの比率が異なった場合、何も表示されない部分が発生します。