我有一个带有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之间。参数名称:值
之前完美无缺,但显然现在不是正确的做事方式。有没有一个快速解决这个问题的好方法?或者我不得不彻底改变放大和缩小的方式?
答案 0 :(得分:1)
xna中的2D摄像机有很多例子......这是我第一次看到那种代码......
视口不用于缩放...它定义了要绘制的屏幕的一部分。
spritebatch.Begin(...,...,...,...,transform)是您需要进行相机转换
你的变换矩阵可以与此类似....
Matrix CameraTransform = Matrix.CreateTranslation(-CameraPosition)
* Matrix.CreateRotationZ(rotation)
* Matrix.CreateScale(Zoom)
* Matrix.CreateTranslation(Viewport.Center);