WisdomSoft - for your serial experiences.

画面解像度

ゲームの画面解像度を設定する方法を紹介します。

ゲーム画面とバックバッファ

ウィンドウのサイズを変更することができましたが、本質的にウィンドウのサイズとゲーム画面のサイズは別であり、Xbox 360 や Windows Phone など、Windows 以外の環境ではウィンドウそのものが存在しません。ゲーム画面はウィンドウのサイズではなく、バックバッファと呼ばれる描画領域に合わせられます。ゲームの画面解像度を変更するには、バックバッファのサイズを変更します。

バックバッファの幅と高さは GraphicsDeviceManager クラスの PreferredBackBufferWidth プロパティPreferredBackBufferHeight プロパティを事前に変更します。これらのプロパティは、ゲームが推奨するバックバッファの幅と高さを設定します。GraphicsDeviceManager は、このプロパティに設定されている値を参考に、生成した GraphicsDevice のバックバッファを設定します。

GraphicsDeviceManager クラス PreferredBackBufferWidth プロパティ
public int PreferredBackBufferWidth { get; set; }
GraphicsDeviceManager クラス PreferredBackBufferHeight プロパティ
public int PreferredBackBufferHeight { get; set; }

PreferredBackBufferWidth には、推奨するバックバッファの幅を指定します。PreferredBackBufferHeight には、推奨するバックバッファの高さを指定します。

GraphicsDeviceManager クラスは、この情報を参考にバックバッファを設定します。起動時にゲームが持つ GraphicsDeviceManager オブジェクトに設定されている上記のプロパティの値からゲーム画面の解像度が決定されます。Windows PC 用のゲームの場合、ゲームウィンドウのサイズはゲームの画面解像度に合わせて決定されます。

コード1
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

public class TestGame : Game
{
    public static void Main(string[] args)
    {
        using (Game game = new TestGame()) game.Run();
    }

    private GraphicsDeviceManager graphicsDeviceManager;

    public TestGame()
    {
        graphicsDeviceManager = new GraphicsDeviceManager(this);
        graphicsDeviceManager.PreferredBackBufferWidth = 1280;
        graphicsDeviceManager.PreferredBackBufferHeight = 720;
    }
}

コード1は、バックバッファの推奨サイズを幅 1280 ピクセル、高さ 720 ピクセルに設定しています。 この解像度で 60 FPS を維持するゲームが、いわゆる 720p に相当します。Windows PC と Xbox 360 のクロスプラットームで動作するゲームを目指す場合、上記の解像度がお勧めです。

GraphicsDeviceManager クラスの PreferredBackBufferWidth プロパティ及び PreferredBackBufferHeight プロパティに設定するのは、ゲームが要求する幅と高さであり、実際に生成されるグラフィックスデバイスに設定されるバックバッファのサイズとは異なる可能性があります。バックバッファに関する詳細な情報は GraphicsDevice クラスの PresentationParameters プロパティから得られます。

GraphicsDevice クラス PresentationParameters プロパティ
public PresentationParameters PresentationParameters { get; }

このプロパティは、グラフィックスデバイスの表示処理に関するパラメータを提供する Microsoft.Xna.Framework.Graphics.PresentationParameters クラスのオブジェクトを返します。

Microsoft.Xna.Framework.Graphics.PresentationParameters クラス
[SerializableAttribute]
public class PresentationParameters

実際のバックバッファの幅は BackBufferWidth プロパティから、高さは BackBufferHeight プロパティから取得できます。

PresentationParameters クラス BackBufferWidth プロパティ
public int BackBufferWidth { get; set; }
PresentationParameters クラス BackBufferHeight プロパティ
public int BackBufferHeight { get; set; }

これらのプロパティは、バックバッファの幅と高さをピクセル単位の値で返します。

コード2
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Diagnostics;

public class TestGame : Game
{
    public static void Main(string[] args)
    {
        using (Game game = new TestGame()) game.Run();
    }

    private GraphicsDeviceManager graphicsDeviceManager;

    public TestGame()
    {
        graphicsDeviceManager = new GraphicsDeviceManager(this);
        graphicsDeviceManager.PreferredBackBufferWidth = 1280;
        graphicsDeviceManager.PreferredBackBufferHeight = 720;
    }

    protected override void Initialize()
    {
        Debug.WriteLine("Width=" + GraphicsDevice.PresentationParameters.BackBufferWidth);
        Debug.WriteLine("Height=" + GraphicsDevice.PresentationParameters.BackBufferHeight);
        base.Initialize();
    }
}
実行結果
コード2 実行結果

コード2は Initialize() メソッドをオーバーライド位、生成された GraphicsDevice オブジェクトのバックバッファの幅と高さを出力します。実行結果を見ると GraphicsDeviceManager に要求したバックバッファのサイズに従って、同サイズのバックバッファが生成されていることが確認できます。