2012-04-04 8 views
0

Ich habe ein altes XNA 3.1-Spiel mit einer 2D-Kamera, die ich vor kurzem zu XNA 4.0 konvertiert habe.
Ich hatte die Kamera-Zoom durch ein neues Ansichtsfenster erstellen, die Grenzen der Kamera Breite/Höhe einstellen, und dann irgendwie ‚Verschmelzung‘ sie wie folgt aus:XNA 3.0 zu 4.0 Umwandlung bewirkt, dass ein Ansichtsfenster 'Zusammenführen' schief geht

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; 

Wenn jedoch die Auflösung des neuen Ansichtsfenster als größer wird Die Auflösung des Grafikgeräts im Ansichtsfenster (auf einer Verkleinerung), dann blitzt es in Zeile 7 auf mit:

Das Ansichtsfenster ist ungültig. Das Ansichtsfenster darf nicht größer als der aktuellen Renderzielgrenzen sein. Die MinDepth und MaxDepth muss zwischen 0 und 1. Parametername: Wert

Das perfekt gearbeitet, aber offensichtlich nicht der richtige Weg, um Dinge jetzt zu tun. Gibt es eine gute Möglichkeit, dies schnell zu beheben? Oder bin ich fest daran, dass ich komplett verändern muss, wie ich ein- und auszoomt?

Antwort

1

Es gibt viele Beispiele für 2D-Kameras in xna ... ist das erste Mal, dass ich diese Art von Code zu sehen ...

Ansichtsfenster ist nicht beabsichtigt, zoomt zu tun ... es definiert einen Teil der Bildschirm zu zeichnen.

spritebatch.Begin (..., ..., ..., ..., Transformation) ist, was Sie Kamera

verwandelt Matrix tun müssen

Ihre verwandeln kann dies ähnlich sein ....

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