2012-04-04 101 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);