LoginSignup
31
28

More than 5 years have passed since last update.

【いまさら】マルチ解像度に対応する対応【メモ】

Posted at

cocos2dxはAndroidとiOS両方にそしてあらゆる解像度にも対応できる最高のゲームエンジンですね!

AndroidやiOSの画面解像度への引き延ばしは(cocos2dx3.0より)ResolutionPolicyとして設定することができます。

AppDelegate.cpp

 auto director = Director::getInstance();
    auto eglView = EGLView::getInstance();
   director->setOpenGLView(eglView);
   eglView->setDesignResolutionSize(designResolutionSize.width,
                                    designResolutionSize.height,
                                    ResolutionPolicy::NO_BORDER);



このResolutionPolicyてなんじゃって人はこちら

んで、このDesignResolutionSizeは、結局ゲームで使う座標系のことのなんですよ。これ大事!たとえば、iPhoneの4inch(1136×640)で設計したとしましょう。

ex
Size designResolutionSize = Size(640,1136);

ところがどっこい、Androidにも対応させたいです。そこで、どんなオプションがあるか、という話です。画面に設定した座標系をどう表示させるかは、先ほどのResolutionPolicyがあるわけです。画面を引き延ばして一致させるのか、全体を表示させるのか、引き延ばしてもアスペクト比をいじるのかいじらないのか。とかね。しかし、もし、リソースが1280×720でデザインされてたらどうしましょう。

ゲームの座標系を伸ばす処理はResolutionPolicyなわけですが、リソースが1280×720では、そのまま貼付けてもうまく行きません。

というわけで、ScaleFactorなんていうオプションがDirectorがあるわけです。リソースがこうあるので、(1136×640) に縮小してくださいっていう処理が次のようになります。

AppDelegate.cpp
//画面のリソースの解像度
Size ResourceDpi = Size(720,1280);
auto  director = Director::getInstance();


director->setContentScaleFactor(MIN(ResourceDpi.size.height / designResolutionSize.height ,
                                       ResourceDpi.size.width / designResolutionSize.width));


ContentScaleFactorは、リソースをゲーム座標系に対しどれくらい縮小するか、大きくするかを決めるファクターなんですよね。
たとえば、1136×640がゲーム座標系で、リソースの解像度が1280×720なら、ContentScaleFactorはこの場合は、1280/1136 = 1.25fとなります。
これは、もとのリソースがゲームの解像度の何倍か、教えてあげるものです。それに応じて、この逆数倍、縮小してあげればちゃんと表示できるわけです。

このResourceDpiは、画面の実際の解像度に合わせて、設定してあげた方が良いです。
たとえば1920*1080(FHD)にたいして1280*720を一旦1136*640に縮小して1920*1080に伸ばしてもやっぱりあまり綺麗ではなかったりするので。

実際の画面の解像度は次のようにして得られます。

ex
 auto eglView = EGLView::getInstance();

//実際の画面の解像度
Size frameSize = eglView->getFrameSize();

これで得た解像度に合わせて、使うリソースを切り替えたりすると端末ごとに綺麗に表示されていいです。

31
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
28