5.画面表示の向きと表示サイズについて
ここでは画面表示についてもう少し詳しく解説したいと思います。
3.画面表示の向きを設定 で「AndroidManifest.xml」を編集して画面表示の縦/横を設定。
4.画面表示サイズを設定 で「main.cpp」を編集して画面の表示サイズとスケーリングを設定。
ここまでは理解できたでしょうか?
それでは次に行きたいと思います。
画面表示の向きを理解する
このような解像度のAndroidタブレットで説明します。
「AndroidManifest.xml」で表示の向きを縦(portrait)にした場合はこの向きになります。
横:800ドット、縦:1280ドットになります。
表示の向きを横(landscape)にした場合はこの向きになります。
横:1280ドット、縦:800ドットになります。
画面サイズとスケーリングを理解する
画面サイズとスケーリングは、「main.cpp」内の途中にある下記の箇所になります。
行先頭のコメント「//」を消すことによりその行が有効となります。
//hgio_view( 480, 800 ); // screen size
//hgio_scale( 1.0f, 1.0f ); // scale value
//hgio_autoscale( 0 ); // auto scale value
まずはじめに画面サイズです。
hgio_view により画面のサイズを決定します。
基本として hgio_view の行はコメント外してください。
次にスケーリングです。
hgio_scale もしくは hgio_autoscale の行のどちらか一方のコメントを外してください。
必ず hgio_view とセットで使用します。
例としては、
hgio_view( 480, 800 ); // screen size
//hgio_scale( 1.0f, 1.0f ); // scale value
hgio_autoscale( 0 ); // auto scale value
もしくは
hgio_view( 480, 800 ); // screen size
hgio_scale( 1.0f, 1.0f ); // scale value
//hgio_autoscale( 0 ); // auto scale value
のようになります。
「hgio_autoscale」の自動スケーリングの種類について理解する
このような解像度のAndroidタブレットで説明します。
ここでは「AndroidManifest.xml」で表示の向きを縦(portrait)とします。
画像をX:0, Y:0の座標に表示する以下のようなソースと画像ファイル(横:480ドット、縦:800ドット)があるとします。
また、開発時のウィンドウサイズは横:480ドット、縦:800ドットとします。
(Windows上では hsp3dish.ini ファイルによりウィンドウサイズを設定)
;-------------------------------
#include "hsp3dish.as"
celload "back.png", 1, 0
gmode 0
repeat
redraw 0
color 0, 0, 0 : boxf
pos 0, 0
celput 1, 0
redraw 1
await 16
loop
;-------------------------------
「back.png」ファイル
「hsp3dish.ini」ファイル
上記のソースをAndroid上で動作させたとき、自動スケーリングの種類によって結果が以下のようになります。
hgio_autoscale( 0 ); : 画面全体に収まる最適な大きさ(縦横比は維持)
hgio_autoscale( 1 ); : X方向のサイズを基準に拡大縮小(縦横比は維持)
hgio_autoscale( 2 ); : Y方向のサイズを基準に拡大縮小(縦横比は維持)
hgio_autoscale( 3 ); : 縦横比は無視して画面全体に表示
一見すると、画面全体に上下左右隙間なく表示されている hgio_autoscale( 3 ); が良いような気がしますが、縦横の比率は無視されているので、動作させるAndroid端末が例えば800x1600ドットような解像度の場合、画像がものすごい縦長で表示されてしまい違和感が出る可能性があります。
また、hgio_autoscale( 1 ); はX方向のサイズを基準に拡大縮小するので、Y方向の上下に画像がはみ出してしまっています。
そのため、縦横の比率を維持したままで拡大をしてくれる hgio_autoscale( 0 ); が一番無難となります。
これで画面表示の向きと表示サイズについては終わりです。