Auflösungsunabhängiges 2D-Rendering in XNA

7

Ich versuche herauszufinden, wie ich ein 2D-Spiel mit jeder Auflösung am besten rendern kann.

Ich rendere das Spiel derzeit mit 1920x1200. Ich versuche, das Spiel auf eine vom Benutzer ausgewählte Auflösung zu skalieren, ohne die Art und Weise, wie ich rendere, oder die Spielelogik zu ändern.

Was ist der beste Weg, um ein Spiel auf eine beliebige Auflösung zu skalieren?

Edit: Ich versuche dies zu erreichen:

http://www.david-amador.com/2010/03/xna-2d-independent-resolution-rendering/

Aber ich denke, der Code, den er hat, ist für eine andere Version von XNA, weil ich die von ihm verwendete Methodenüberladung nicht finden kann.

AttackingHobo
quelle
1
Haben Sie eine Standardauflösung und zeichnen Sie alles auf einer Skala von Originalabmessungen * (Benutzerauflösung / Standardauflösung)?
Die kommunistische Ente
1
Suchen Sie die SpriteBatch.Draw-Überladung? Wenn Sie XNA 4.0 verwenden, müssen Sie dieses für die Transformationsmatrix verwenden: msdn.microsoft.com/en-us/library/ff433701.aspx Dies ist das letzte Argument. Versuchen Sie beim nächsten Mal, den tatsächlichen Code anzugeben.
Michael Coleman
Beim Durchlesen des Beispielcodes funktionierte nur eine Zeile in der Draw-Funktion - die Parameter für SpriteBatch.Begin wurden in 4.0 geändert: spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null , Resolution.getTransformationMatrix ());
Leniency
Sie können auch zu einem Renderziel rendern und dieses dann einfach skalieren. Nur ein anderer Weg, um es zu tun. Ich bin nicht der Meinung, dass dies ein schreckliches Problem wäre.
Michael Coleman

Antworten:

4

Bearbeiten:

Sie suchen nach dem SpriteBatch.Draw-Aufruf (Texture2D, Rectangle, Color) . Das Rechteck repräsentiert das skalierte Zeichenziel auf dem Bildschirm.

Ich gehe hier davon aus, dass Sie kein Rasterlayout verwenden - wurde in der Frage nicht angegeben, daher gehe ich davon aus, dass Assets an einem beliebigen Pixel anstatt in einem festgelegten Raster gezeichnet werden können.

  1. Entscheiden Sie zuerst, was eine "native" Auflösung sein soll. Wahrscheinlich nur die Höhe, aber verschiedene Monitore haben unterschiedliche Seitenverhältnisse, so dass dies berücksichtigt werden muss. Wählen wir 1200 als native Höhe. Alle Skalierungen basieren auf dieser Zahl.

  2. Angenommen, ich starte das Spiel auf meinem Fernseher mit nur 720p - 60% der Höhe. Alle Einheitskoordinaten und die Rechteckgrößen sollten dann mit 0,6 multipliziert werden. Eine hypothetische Ork-Einheit ist 20 Pixel groß und befindet sich bei (50,45) unter nativer Auflösung. Zum Zeitpunkt des Zeichnens würde das Zielrechteck 12 Pixel hoch und mit (30, 27) gezeichnet.

  3. Wo genau Sie in der Skalierung rechnen, kann ein Problem sein. Sie können das Spiel vollständig so ausführen, als ob es mit nativer Auflösung ausgeführt würde. Dies würde keine zusätzliche Skalierung bei Entfernungsberechnungen, Animationsgeschwindigkeit und Interpolation usw. bedeuten. Führen Sie die Skalierung dann nur zum Zeitpunkt der Zeichnung oder mit Treffer-Tests durch Mausklicks. Wenn Sie alles skalieren möchten, müssen Sie diese Skalierung nur für alle Systeme weltweit zugänglich machen und daran denken, dies zu berücksichtigen.

Hoffe das beantwortet deine Frage besser.

Nachsicht
quelle
Ich möchte mein Spiel skalieren, ohne es anders zeichnen zu müssen. Sie haben mir gerade gesagt, wie ich die Auflösung ändern soll. Wenn ich nur die Auflösung ändere, ändert sich nicht der Maßstab, sondern nur die Größe des Spiels, was ich nicht will.
AttackingHobo
Ah, gotcha. Ich habe falsch verstanden, worüber Sie gefragt haben. Antwort bearbeiten, um das zu beheben.
Kronzeugenregelung
1
Ich habe meine Frage bearbeitet. Ich möchte in der Lage sein, auf allen Systemen alles gleich zu rendern, es aber nachträglich zu skalieren.
AttackingHobo