0

2D カメラを搭載した古い XNA 3.1 ゲームを最近 XNA 4.0 に変換しました。
新しいビューポートを作成し、境界をカメラの幅/高さに設定してから、次のように「マージ」してカメラをズームしました。

Viewport viewport = new Viewport();
viewport.X = 0;
viewport.Y = 0;
viewport.Width = camera.DisplayWidth;
viewport.Height = camera.DisplayHeight;

Viewport priorViewport = this.GraphicsDevice.Viewport;
this.GraphicsDevice.Viewport = viewport;
GraphicsDevice.Clear(Color.Black);
DrawGameLayer(gameTime, "PreContent");
this.GraphicsDevice.Viewport = priorViewport;

ただし、新しいビューポートの解像度がグラフィックス デバイスのビューポートの解像度よりも大きくなると (ズームアウト時)、次のように 7 行目で爆発します。

ビューポートが無効です。ビューポートは、現在のレンダー ターゲットの境界よりも大きくすることも、外に出すこともできません。MinDepth と MaxDepth は 0 から 1 の間でなければなりません。 パラメータ名: 値

これは以前は完全に機能していましたが、現在は明らかに正しい方法ではありません。これをすばやく修正する良い方法はありますか?または、ズームインとズームアウトの方法を完全に変更する必要がありますか?

4

1 に答える 1

1

xnaには2Dカメラの例がたくさんあります...そのようなコードを見るのは初めてです...

ビューポートはズームを行うためのものではありません...描画する画面の部分を定義します。

spritebatch.Begin(...,...,...,..., transform) は、カメラの変換を行うために必要なものです

あなたの変換行列はこれに似ている可能性があります....

Matrix CameraTransform = Matrix.CreateTranslation(-CameraPosition) 
                       * Matrix.CreateRotationZ(rotation) 
                       * Matrix.CreateScale(Zoom) 
                       * Matrix.CreateTranslation(Viewport.Center);
于 2012-04-05T01:41:58.003 に答える