XNA 3.0到4.0的转换会导致视口';合并';出错
本文关键字:视口 合并 出错 XNA 转换 | 更新日期: 2023-09-27 18:29:52
我有一个带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之间。参数名称:值
这在以前非常有效,但现在显然不是正确的做法。有什么好方法可以快速解决这个问题吗?还是我不得不完全改变放大和缩小的方式?
xna中有很多2d相机的例子。。。是我第一次看到这种代码。。。
视口不用于进行缩放。。。它定义了要绘制的屏幕的一部分。
spritebatch.Begin(…,…,……,transform)是你需要做的相机转换
你的变换矩阵可以类似于。。。。
Matrix CameraTransform = Matrix.CreateTranslation(-CameraPosition)
* Matrix.CreateRotationZ(rotation)
* Matrix.CreateScale(Zoom)
* Matrix.CreateTranslation(Viewport.Center);