折りたたみ端末を携帯ゲーム機のように開く
開いた画面を上下に分け、上にゲーム画面、下に操作ボタンを配置しました。ニンテンドーDSのタッチ画面はボタンの間に置き、開いた状態のボタン位置は別に保存します。
折りたたみ端末を開くと、一般的なスマートフォンとは画面比率が大きく変わります。従来のN-EMUはウィンドウが横長か縦長かだけで配置を選んでいました。ほぼ正方形の内側画面にはどちらも合わないため、開いた状態専用の配置を追加しました。
配置はニンテンドーDSを参考にしました。上にゲーム画面、下に操作ボタンを置く構成です。ヒンジの向きにかかわらず上下に分け、半分開いた状態では折り目の位置に合わせて境界を調整します。
下半分のボタンは実機の配置に従いました。LとRは折り目のすぐ下、十字キーとボタンは中央の高さ、SelectとStartは一番下です。ニンテンドーDSは上画面が上半分を埋め、下半分の中央に4:3のタッチ画面が入ります。横向きに開くと下半分が低くなるため、タッチ画面は帯の高さに合わせて小さくしますが、2つの画面を上にまとめて置いた場合より小さくはなりません。
開いた状態のボタン位置は通常の縦向き・横向きとは別に保存します。既存の保存形式に専用の項目を追加し、以前のバージョンでも縦向き・横向きの配置を読めるようにしました。ただし、以前のバージョンでは開いた状態の配置を読めず、再保存するとボタン配置の情報が失われる場合があります。
折り目の位置と状態にはOSの情報を使います。AndroidではJetpack WindowManager、iOS 27.1 SDKでビルドしたアプリではiOSの折りたたみ情報を読み取ります。iOSで情報を取得できない場合は、ウィンドウのサイズクラスで開いた状態を判定します。配置計算は自動テストで、画面はiOSシミュレータとAndroidエミュレータで確認しました。Androidではテスト用の折りたたみ情報を使っており、実機検証はまだ残っています。
開閉してもゲームは止まりません。押していたボタンは離されます。画面が切り替わる瞬間、指の下に何があるか分からないからです。
あわせて読みたい開発の話
- 開発の話v1.1.1クローズドベータテスト
本のように開く端末でニンテンドーDSの画面を広げた理由
折りたたみ端末を本のように持つと、以前の配置ではニンテンドーDSのタッチ画面が小さくなっていました。2画面を中央に、操作ボタンを両側に移して、タッチできる領域を広げました。
- 開発の話v1.0.8クローズドベータテスト
コントローラー接続時にゲーム表示を広げた理由
タッチボタンが消えても、ゲーム表示は元の大きさのままでした。空いた領域を活用し、DSの2画面配置も操作方法に合わせて切り替えるようにしました。
- 開発の話v0.2.0初期開発
複数のゲーム機を1つのアプリに
機種が変わっても同じライブラリでゲームを選び、セーブデータを管理できるよう、複数のエミュレーターコアを組み合わせました。