Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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();

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした