差分

ナビゲーションに移動 検索に移動

MonoGameで解像度を取得する

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

案内メニュー