2

MonoGame 3.01 と SwapChainBackgroundPanel を使用して XAML と統合する Windows 8 ゲームを作成しています。私のアセットは 16:9 のアスペクト比に最適化されていますが、Win8 デバイスの解像度が異なるため、4:3 もサポートする必要があります。

現在、次の問題に直面しています。

  1. ゲームを 2 番目のモニターにドラッグしても画面のサイズが変更されない

        _graphics.PreferredBackBufferWidth = (int)width;
        _graphics.PreferredBackBufferHeight = (int)height;
        _graphics.ApplyChanges();
    

SwapChainBackgroundPanel (GamePage) では、サイズの変更に反応します

    void GamePage_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        Game.SetBackBuffer(e.NewSize.Width, e.NewSize.Height);
    }

しかし、何も起こらず、初期 (ゲームが初期化された後) のバック バッファーの変更のみが適用されるようです。

  1. 拡大して埋めるのではなく、縦横比を維持する方法はありますか。レターボックスで?

Windows 8 で複数の解像度 (スナップ ビューを含む) をサポートするためのベスト プラクティスは何ですか?

編集: 明確にするために- GamePage_SizeChanged が実行されているだけで、効果がないように見える _graphics.ApplyChanges()

4

1 に答える 1

0

Client Size Changed Event を Game コンストラクターに追加してみませんか。

例:

public Game1()
{
    _graphics = new GraphicsDeviceManager(this);
    this.Windows.ClientSizeChanged += Window_ClientSizeChanged;
}

void Window_ClientSizeChanged(object sender, EventArgs e)
{
    int currentWidth = this.Window.ClientBounds.Width;
    int currentHeight = this.Windows.ClientBounds.Height;
}

また、ApplicationViewChanged のイベント ハンドラーを追加して、ViewChangeArgs を Windows8 の ApplicationViewState 列挙と比較することで、Snapped、Filled、および Full ViewState を検出することもできます。_graphics.SwapChainPanel プロパティからゲームの SwapChainBackgroundPanel にアクセスできます。最後に、AspectRatio、Height、Width を持つ _graphics.GraphicsDevice.DisplayMode もあります。

于 2013-03-11T08:16:06.347 に答える