XNA 3.0到4.0转换导致视口“合并”出错

时间:2012-04-04 05:20:44

标签: c# xna xna-4.0 xna-3.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之间。参数名称:值

之前完美无缺,但显然现在不是正确的做事方式。有没有一个快速解决这个问题的好方法?或者我不得不彻底改变放大和缩小的方式?

1 个答案:

答案 0 :(得分:1)

xna中的2D摄像机有很多例子......这是我第一次看到那种代码......

视口不用于缩放...它定义了要绘制的屏幕的一部分。

spritebatch.Begin(...,...,...,...,transform)是您需要进行相机转换

你的变换矩阵可以与此类似....

Matrix CameraTransform = Matrix.CreateTranslation(-CameraPosition) 
                       * Matrix.CreateRotationZ(rotation) 
                       * Matrix.CreateScale(Zoom) 
                       * Matrix.CreateTranslation(Viewport.Center);