0

基本的に私がやりたいことは、最大化されたウィンドウ内で 800x600 のゲームを中央に配置することです。したがって、解像度が 1280x1024 の場合は大きな境界線が表示されますが、解像度が 800x600 の場合は画面全体を占有します

これは Initialize メソッドにあります。ゲーム ウィンドウを固定の 3D 境界線でフルスクリーンにしますが、クライアント領域もフルスクリーンにサイズ変更されます。

Form gameWindowForm = (Form)sys.Form.FromHandle(this.Window.Handle);
gameWindowForm.FormBorderStyle = FormBorderStyle.Fixed3D;
gameWindowForm.Text = "";
gameWindowForm.ControlBox = false;
gameWindowForm.WindowState = sys.FormWindowState.Maximized;

優先バック バッファ、クライアント バウンド サイズ、ビューポート、およびディスプレイ モードを設定してみました。サイズを変更しようとしても、読み取り専用であるか、何も変更されないため、サイズを変更できません。

何か助けはありますか?

4

2 に答える 2

2

ウィンドウのレイアウトをカスタマイズしたい場合は、公式の WinForms サンプルをお試しください。XNA には、ウィンドウ内のクライアント領域をいじる「公式の」方法はありません。

ただし、ウィンドウ内でレンダリング領域を中央に配置したいだけの場合は、次のように、各フレームの先頭にビューポートを設定するだけでそれを実行できるはずです。

int width = GraphicsDevice.PresentationParameters.BackBufferWidth;
int height = GraphicsDevice.PresentationParameters.BackBufferHeight;
GraphicsDevice.Viewport = new Viewport(
        width/2 - 800/2, height/2 - 600/2, 800, 600);

(ウィンドウが小さすぎてビューポートが画面サイズを超えると、このコードは失敗することに注意してください。したがって、それを確認して応答する必要があります。おそらく、より小さなビューポートを使用してください。)

GraphicsDevice.ClearXNA 4.0 では、ビューポートだけでなく、バ​​ックバッファー全体がクリアされることに注意してください (ビューポート全体に単色の四角形を描画するだけです)。

于 2012-09-06T12:45:37.950 に答える
1

過去に同様の問題を解決するためにレンダーターゲットを使用しました。シーンをレンダー ターゲットにレンダリングし、ターゲットを画面の中央にレンダリングするだけです。

これにより、ビューポートの周りに「派手な」境界線を簡単にレンダリングすることもできました。

レンダー イベント/メソッドでレンダー ターゲットをレンダリングする場所を計算するときに、サイズ変更を処理できます。

rendertargets に関する詳細: http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php

于 2012-09-06T12:55:02.363 に答える