1

Monogame を使用して、Windows 8 アプリ ストア用の XNA ゲームを作成しています。また、外部モニターに接続されたラップトップを使用しています。当然、外付けモニターの解像度はラップトップの画面よりもはるかに高くなっています。アプリをある画面から別の画面にドラッグすると、ビュー ポートの解像度が変わります。

私のコンストラクタで私が使用している

 _graphics = new GraphicsDeviceManager(this);
 _graphics.PreferredBackBufferHeight = 768;
 _graphics.PreferredBackBufferWidth = 1366;

ビューポートの解像度を設定するには。これにより、アプリケーションがいずれかのモニターで実行されている場合にアプリが正常に動作しますが、アプリをあるモニターから別のモニターにドラッグすると、GraphicsDeviceManager の解像度が変更されます。この変更を防ぐ方法はありますか?

4

2 に答える 2

1

だから私はそれを理解しました

最初に、グラフィックデバイスのポート解像度が変更されたかどうかを確認するメソッドを作成しました

 private bool hasResolutionChanegd()
    {
        if ((GraphicsDevice.Viewport.Width != ScreenManager.Instance.ScreenWidth) || (GraphicsDevice.Viewport.Height != ScreenManager.Instance.ScreenHeight))
        {
            return true;
        }
        else
        {
           return false;
        }

    }

更新のたびにこのメソッドを呼び出します

if (hasResolutionChanegd())
        {
             Debug.WriteLine("Resolution Change new width= " + GraphicsDevice.Viewport.Width +" new height="+ GraphicsDevice.Viewport.Height);

            _graphics.PreferredBackBufferHeight = 768;
            _graphics.PreferredBackBufferWidth = 1366;
            _graphics.ApplyChanges();
        }

このように、グラフィックデバイスマネージャーで解像度が変更されるたびに(ユーザーがアプリをある画面環境から別の画面環境にドラッグしたとき)、優先解像度が適用されます。

于 2013-01-31T21:35:20.290 に答える
1

元のポスターと同じ結果が得られますが、MonoGame ではなく XNA を使用しています。2 つのモニター間でウィンドウをドラッグすると、解像度が変わりますが、ClientSizeChanged イベントは (もちろん) トリガーされません。SizeChanged イベントを使用するという上記の提案は役に立ちますが、ドキュメントに記載されているのは Windows8 のみです。

Window.ScreenDeviceNameChanged イベントを処理して修正したようです - ClientSizeChanged と同じハンドラーに接続しました。

これを元の投稿へのコメントとして入れたかったのですが、システムが許可するのに十分な「評判」ポイントがありません。

于 2014-01-06T20:13:36.900 に答える