【问题标题】:XNA 3.0 to 4.0 conversion causes a viewport 'merging' to go awryXNA 3.0 到 4.0 的转换导致视口“合并”出错
【发布时间】:2013-11-01 00:36:58
【问题描述】:

我有一个带有 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 之间。参数名称:值

这在以前很有效,但现在显然不是正确的做法。有没有快速解决这个问题的好方法?还是我不得不完全改变放大和缩小的方式?

【问题讨论】:

    标签: c# xna xna-4.0 xna-3.0


    【解决方案1】:

    xna中有很多二维相机的例子……我第一次看到这种代码……

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

    spritebatch.Begin(...,...,...,..., transform) 是你需要做的相机变换

    你的变换矩阵可以和这个类似......

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多