「MonoGameで解像度を取得する」の版間の差分
ページの作成:「MonoGameでは設定を要望した解像度と実際の解像度が異なり、環境に合わせて近似するベストな解像度が選ばれるようになっ...」 |
Administrator (トーク | 投稿記録) |
||
| (6人の利用者による、間の15版が非表示) | |||
| 1行目: | 1行目: | ||
[[MonoGame]] | [[MonoGame]]の解像度設定は「要望した解像度」と「実際の解像度」が異なり、環境に合わせて近似するベストな解像度が選ばれるようになっている。これは[[Android]]端末などでは[[液晶]]の解像度が事前に決まっており、こちらの要望は基本的に無視されるためである。 | ||
たとえばGameクラス(MonoGameにおける[[エントリポイント]]に相当するクラス)で以下のように解像度の設定を行ったとする。 | たとえばGameクラス(MonoGameにおける[[エントリポイント]]に相当するクラス)で以下のように解像度の設定を行ったとする。 | ||
< | <syntaxhighlight lang="csharp"> | ||
GraphicsDeviceManager.IsFullScreen = false; | |||
GraphicsDeviceManager.PreferredBackBufferWidth = 720 ; | |||
GraphicsDeviceManager.PreferredBackBufferHeight = 1232 ; | |||
GraphicsDeviceManager.ApplyChanges(); | |||
</ | </syntaxhighlight > | ||
これが[[Windows]]や[[Mac]]で実行した場合はよほどのことが無い限り要望した解像度になるだろう。しかし[[Android]]では[[カタログスペック]]の解像度ではなく、上部のステータスバーや下部のナビゲーションバーを除いた領域が実効解像度となるため、それらを考慮した「もっとも近似する解像度」が設定される(詳細は「[[MonoGameで解像度を設定する]]」を参照)。ホームボタンが物理ボタンの機種がほとんどなくなったので注意しよう。 | |||
実効解像度は以下のプロパティで取得できる。 | |||
<syntaxhighlight lang="csharp"> | |||
GraphicsDevice.PresentationParameters.BackBufferWidth; | |||
GraphicsDevice.PresentationParameters.BackBufferHeight; | |||
</syntaxhighlight > | |||
ちなみにカタログスペックの解像度は以下のプロパティで取得できる。 | |||
<syntaxhighlight> | |||
// | |||
GraphicsDevice.DisplayMode.Width; | |||
GraphicsDevice.DisplayMode.Height; | |||
//または | |||
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width; | |||
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height; | |||
</syntaxhighlight> | |||
== | == 注意点 == | ||
なお、解像度を要望する(反映させる)GraphicsDeviceManager.ApplyChangesメソッドは以下の点に注意すること。 | |||
* [[MonoGame/クラスライブラリ/Gameクラス|Gameクラス]]のコンストラクタ内で呼び出しても無反応。 | |||
* 明示的に呼び出す場合は[[MonoGame/クラスライブラリ/Gameクラス|Gameクラス]]のInitializeメソッドが呼ばれたタイミングで利用可能となる。 | |||
* 暗黙的に[[MonoGame/クラスライブラリ/Gameクラス|Gameクラス]]のbase.Initialize()の中でも実行されている模様 | |||
*: base.Initializeメソッドを呼び出した時点で[[ゲームループ]]が走り出すので注意。 | |||
== 関連項目 == | |||
* [[MonoGameで解像度を設定する]] | |||
* [[MonoGame (Xamarin.Android)で初期解像度がおかしい機種の対策]] | |||
[[category:Xamarin]] | [[category: MonoGame]] | ||
[[category: | [[category: MonoMac]] | ||
[[category: | [[category: Xamarin.Mac]] | ||
[[category: Xamarin.iOS]] | |||
[[category: Xamarin.Android]] | |||
2020年9月15日 (火) 07:01時点における最新版
MonoGameの解像度設定は「要望した解像度」と「実際の解像度」が異なり、環境に合わせて近似するベストな解像度が選ばれるようになっている。これはAndroid端末などでは液晶の解像度が事前に決まっており、こちらの要望は基本的に無視されるためである。
たとえばGameクラス(MonoGameにおけるエントリポイントに相当するクラス)で以下のように解像度の設定を行ったとする。
GraphicsDeviceManager.IsFullScreen = false;
GraphicsDeviceManager.PreferredBackBufferWidth = 720 ;
GraphicsDeviceManager.PreferredBackBufferHeight = 1232 ;
GraphicsDeviceManager.ApplyChanges();
これがWindowsやMacで実行した場合はよほどのことが無い限り要望した解像度になるだろう。しかしAndroidではカタログスペックの解像度ではなく、上部のステータスバーや下部のナビゲーションバーを除いた領域が実効解像度となるため、それらを考慮した「もっとも近似する解像度」が設定される(詳細は「MonoGameで解像度を設定する」を参照)。ホームボタンが物理ボタンの機種がほとんどなくなったので注意しよう。
実効解像度は以下のプロパティで取得できる。
GraphicsDevice.PresentationParameters.BackBufferWidth;
GraphicsDevice.PresentationParameters.BackBufferHeight;
ちなみにカタログスペックの解像度は以下のプロパティで取得できる。
//
GraphicsDevice.DisplayMode.Width;
GraphicsDevice.DisplayMode.Height;
//または
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;注意点[編集 | ソースを編集]
なお、解像度を要望する(反映させる)GraphicsDeviceManager.ApplyChangesメソッドは以下の点に注意すること。
- Gameクラスのコンストラクタ内で呼び出しても無反応。
- 明示的に呼び出す場合はGameクラスのInitializeメソッドが呼ばれたタイミングで利用可能となる。
- 暗黙的にGameクラスのbase.Initialize()の中でも実行されている模様
- base.Initializeメソッドを呼び出した時点でゲームループが走り出すので注意。