2016-07-31 47 views
0

Meine Grafik Gerät so eingestellt ist, wie folgt:Schwierigkeiten zu verstehen, machen Ziele und zurück Puffer in monogame

GraphicsDeviceManager = new GraphicsDeviceManager(GameBase.GameRef); 
GraphicsDeviceManager.PreferredBackBufferWidth = 640; 
GraphicsDeviceManager.PreferredBackBufferHeight = 480; 
GraphicsDeviceManager.ApplyChanges(); 

Ich kann nicht überall auf Google zu erklären genau das finden, was die bevorzugte zurück Pufferbreite bedeutet.

richte ich ein Renderziel wie folgt auf:

RenderTarget = new RenderTarget2D(
    GraphicsDeviceManager.GraphicsDevice, 
    640, 
    480, 
    false, 
    GraphicsDeviceManager.GraphicsDevice.PresentationParameters.BackBufferFormat, 
    DepthFormat.Depth24); 

ich etwas auf Google nicht über das, was gezeichnet die 640 und 480 tatsächlich bedeuten, mit Bezug auf, wie die Renderziel finden.

Das Problem, das ich habe, ist, dass, wenn ich die Größe des Fensters, alles streckt. Ich versuche zu verstehen, was Monogame tut, um dies zu verursachen, und dann endlich eine Lösung zu finden.

Am mein Fenster starten ist 640x480 und die PreferredBackBufferWidth und Höhe sind 640/480 und das Renderziel 640/480

ist, wenn ich das Fenster zu 1920x1080 zum Beispiel der Größe, alles erstreckt, so irgendwie monogame nicht mehr Rendering der 640x480 Textur auf einen 640x480 Teil des Bildschirms, aber ich habe keinen der Werte geändert oder Code dafür gemacht.

Wenn ich die Größe des Bildschirms ändere, sollte das Renderziel bei der neuen Größe des Fensters zerstört oder neu erstellt werden, oder sollte die Breite und Höhe des Backpuffers geändert werden oder beides oder etwas anderes?

Ich bin sehr verwirrt und es gibt keine Online-Dokumentation, die technisch genug ist, um im Detail zu beantworten. Sobald ich es verstanden habe, sollte ich in der Lage sein, etwas Code zu schreiben, so dass nichts passiert, wenn Sie die Größe des Bildschirms ändern, und die schwarze Fläche um die rechte/untere Kante herum ist größer, als das, was ich bin Rendern nach.

+0

Ich kann es jetzt nicht überprüfen. Aber soweit ich mich erinnere, sollten beide in der Größe geändert werden. Stellen Sie sich den Back Buffer des "Papiers, auf dem Sie zeichnen" vor, während das RenderTarget "das Flugzeug ist, auf das Sie Ihr bereits gezeichnetes Bild projizieren". Wenn Sie also nicht dehnen möchten, müssen Sie den Puffer ändern, um mehr Platz auf dem "Papier" zu haben, und dann RenderTarget ändern, um tatsächlich einen "Platz zum Zeigen Ihrer Zeichnung" zu haben. –

+0

Also ich ein einfaches (Beispiel) Szenario, sollte Ihr Backbuffer die maximale Größe haben, die Sie planen, zu zielen. –

+0

Ich weiß, was Sie meinen, an dem Tag, als XNA noch lebte, war es einfach, Hilfe zu XNA-Tutorials zu finden, anstatt Skelett-Referenzthemen auf MSDN. Das Beste, was ich finden kann, ist [dieser Artikel] (https://msdn.microsoft.com/en-us/library/bb195022.aspx), da ist auch ein bisschen das Seitenverhältnis. Hoffe es hilft – MickyD

Antwort

0

Der Hintergrundpuffer ist ein spezielles Renderziel, das auf dem Bildschirm angezeigt wird. Es wird gestreckt, um das Fenster zu füllen, was zu einer Skalierung führt, wenn die Fenstergröße nicht übereinstimmt.

Sie können die Größe des Backpuffers ändern, wenn sich die Fenstergröße ändert. Das Ereignis Game.Window.ClientSizeChanged wird ausgelöst, wenn dies geschieht (beachten Sie, dass es möglicherweise mehrfach ausgelöst wird, wenn der Benutzer die Größe des Fensters durch Ziehen ändert). Dann die hinteren Puffer Ändern der Größe ist einfach

GraphicsDeviceManager.PreferredBackBufferWidth = Window.ClientBounds.Width; 
GraphicsDeviceManager.PreferredBackBufferHeight = Window.ClientBounds.Height; 
GraphicsDeviceManager.ApplyChanges(); 

Ob Sie neu erstellen sollten die RenderTarget hängen davon ab, was Sie verwenden es für.

+0

Ich hätte gerne die Möglichkeit, die Ausgabe an die Fenstergröße anzupassen, aber diese als Option ein- oder auszuschalten.Manchmal möchte ich, dass es sich dehnt, und manchmal möchte ich mehr vom Bildschirm rendern (so sehen Sie mehr "Kacheln" im Spiel). Vermutlich sollten beide dann die gleiche Größe haben. Ich werde damit experimentieren. – NibblyPig