Cocos2d-x運用タイトルにおける新画面サイズ対応

こんにちは、クライアントエンジニアの小松原です。

iOS/Androidアプリ開発においては、新しいOSが発表されるたびに素早くそれらに対応する必要があります。

本記事では、2017/11/03のiPhoneX発売に向けてクライアントアプリで対応した時の話を例に、新しい画面サイズに対応する時の苦労話を紹介します。

開発環境

cocos2d-x v2系

XCode8.2.1

iPhoneXの発売日(2017/11/3)より前にアプリ側で対応するために、XCode9にバンドルされているiPhoneXシミュレータを利用して挙動の確認をしていくこととなります。

また、前提として運用タイトルであることの諸々の事情と前もってbeta版の時に対応した時の話のため、当時としてはXCode9への移行は見合わせてXCode8で対応した時の話になります。

シェーダ作成時の問題

iPhoneXのシミュレータで起動したところ、シェーダの描画タイミングでクラッシュしてしまいました。

原因はEAGLViewの生成ロジックで、画面サイズに応じて描画領域の生成処理を分けていたところ、下記の分岐に当てはまらず生成に失敗していました。

・固定サイズの描画領域を生成(iPhone4、iPhone4Sなど)

・端末画面サイズと同じ描画領域を生成(iPhone5以降,Plus含む)

・固定サイズの描画領域を生成し、左右にiPad用の固定画像を表示(iPad各種)

・固定サイズの描画領域を生成し、左右にiPad pro用の固定画像を表示(iPad Pro)

iPhoneXの画面サイズは375 x 812ptとなり縦長なので、今回は描画領域をiPhone5などの比率に合わせ、上下に固定画像を表示させることで対応しました。

画面サイズ定義の対応

検証のためにXCode9は利用するものの、申請時などはXCode8を使わなければならず両方への対応が必要です。

cocos2d-xではrootViewController.mmでOpenGLのViewを生成しますが、これはStoryboardから起動時にスクリーンの大きさをAutoLayoutで取得しているものになります。

ところが、 XCode8にはiPhoneXの画面サイズがStoryboardに定義されていないため、正しい画面サイズが取得できません。

そこで、Storyboardを使用せず、Info.plistに画面サイズを定義することにしました。

fcd27485-fcc2-729a-5782-9dd41867f165.png

targetの設定にあるLaunch Screen Fileから、StoryBoardの設定を削除します。

Info.plist設定値は下記のようになります。

76311d09-2d37-c4f6-947c-ad5479669cfc.png

対応結果

下記のように表示されました。

8289fdea-4892-2d39-ec4f-45df271809b2.png

XCode8でビルドしたappをiPhoneX(XCode9)シミュレータで動かす

下記手順にて実行可能です。

1 XCode8系でプロジェクトをビルド

2 インストールされているシミュレータのUDIDを確認

xcrun instruments -s

[ ]で囲まれた部分がデバイスのUDIDとなります。

3 手順2で確認したUDIDを指定し、iPhoneXシミュレータを起動

xcrun instruments -w BC97940D-CE3E-44CC-BBD5-EE391B124ABB

4 Xcode8系でビルドしたBundle Applicationに移動

cd /Users/my_user/Library/Developer/CoreSimulator/Devices/5B77A34C-0691-4F13-914E-6978AF871200/data/Containers/Bundle/Application/3A5FF97A-58A5-49C8-A1C8-52213E6D4A00

5 appをシミュレータにインストール

xcrun simctl install booted gang2.app

まとめ

両OS共に毎年のアップデートがありますが、特にiOS関連は情報公開から対応必須になるまでの期日が短いため、素早い情報拾集が求められていると感じます。

Androidの対応についてもまた記事にできたらと思うので、しばらくお待ち下さい。

Cocos2d-x運用タイトルにおける新画面サイズ対応” への1件のフィードバック

コメントは停止中です。