2012-04-04 96 views
0

我有一个旧的XNA 3.1游戏与2D相机,我最近转换到XNA 4.0。
我不得不通过创建一个新的视窗,边界设置到相机的宽度/高度,然后有点“合并”他们这样的相机变焦:XNA 3.0到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

有很多的在XNA 2D相机的例子......是我第一次看到这种代码...

视不打算做缩放...它定义的一部分屏幕被绘制。

spritebatch.Begin(...,...,...,...,变换)是你需要做的摄像头变换

您的变换矩阵可类似这样的东西....

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