Wie bekomme ich schönen kleinen Text in XNA, ohne externe Bibliotheken zu verwenden?

13

In XNA ist die Spritefont-Technologie schrecklich. Nuclex macht den Job so viel besser, aber ich möchte keine externen Referenzen haben, und ich bin fast fertig mit meinem Spiel.

Bei der Verwendung von Schriftarten wie Sansation oder Quicksand sieht es bei kleineren Schriftgrößen fürchterlich aus. Es ist so schlecht!

Gibt es dafür eine bekannte Problemumgehung? Ich habe versucht, die Schriftgrößen auf extrem hoch einzustellen und sie dann im Spritebatch zu verkleinern, ohne Erfolg.

Mathias Lykkegaard Lorenzen
quelle
Ich benutze SpriteFont , um meine Schriften für XNA zu erstellen. Sie haben viel Flexibilität. Ich stelle auch sicher, dass die Position der Schrift eine Ganzzahl ist, damit kein unangenehmes Antialiasing auftritt, aber dies ist wahrscheinlich keine großartige Lösung. Sie können auch versuchen, Punkte in Ihren Text-Spritebatch-Aufrufen zu filtern.
Jonathan Connell
Vergessen Sie nicht, Ihre kleinen Schriftarten auf einer Vielzahl von realen Geräten und Personen zu testen. Wenn es sich um einen 360-Titel handelt und damit auf Fernseher zielt, müssen die Bildelemente in der Regel etwas größer sein als auf einem PC-Bildschirm.
Lars Viklund
Ich mache ein PC-Spiel und die Schriftgröße ist auf eine ganze Zahl eingestellt.
Mathias Lykkegaard Lorenzen
1
Skalieren Sie keine Texte, sondern erstellen Sie ein Spritefont für jede gewünschte Größe.
Wouter
1
Noch ein paar Regeln für dich hier. Klemmen Sie den Positionsvektor auf ganze Zahlen vor Rendering, sonst Abtasten wird Ihren Ausgabetext Look macht Müll . Möglicherweise empfiehlt es sich, den Textur-Sampler vor dem Rendern von Text auf Point / Nearest Neighbour zu ändern. Vor allem, wenn Ihre Schrift pixelig ist :)
Cubed2D

Antworten:

11

Mit XNA können Sie eine Textur als Spritefont importieren . Sie können wahrscheinlich bessere Andeutungen und Anti-Aliasing-Effekte in Ihrer Schriftart erzielen, wenn Sie die einzelnen Zeichen manuell in einem guten Bildbearbeitungsprogramm anordnen, anstatt sich auf das von XNA generierte Sprite-Sheet zu verlassen.

Tim R.
quelle
13

Der XNA-Sprite-Font-Prozessor verwendet die DXT3-Komprimierung, die mit dem neuen vormultiplizierten Alpha in XNA 4.0 nicht gut funktioniert. Daher das blockige Aussehen des Textes.

Der Nuclex Sprite-Schriftprozessor gibt genau die gleichen Daten aus, mit der Ausnahme, dass die interne Datei , in der Texture2Ddie Schriftbitmap-Daten gespeichert sind, nicht komprimiert ist - daher treten keine Qualitätsprobleme auf.

Da die Daten vom Nuclex-Prozessor dasselbe Format haben, können sie vom XNA- SpriteFontReader gelesen werden, und Sie müssen keine Nuclex-Bibliotheken für die Verteilung in Ihr Spiel einbeziehen.

(Außerdem können Sie bequem dasselbe XML-Format wie die nativen Sprite-Schriftdefinitionen von XNA verwenden.)

Davon abgesehen: Es ist nichts Falsches daran, externe Bibliotheken mit Ihrem Spiel zu bündeln. Es ist nicht so, als würden sie auf Ihrem System installiert oder so. (Sie könnten sogar so weit gehen, die beiden Baugruppen zusammenzuführen).

Das Gleiche gilt für den Code (wenn Sie zum Beispiel über die Versionskontrolle besorgt sind). Sie können einfach Nuclex.Fonts.Content.TrueTypeImporter.dllIhren Quellcode eingeben. Es ist eigentlich keine große Sache.

Andrew Russell
quelle
9

Sie können Pixelschriften verwenden :

pf Tempestavariante

Wenn Sie eine Pixelschrift in der Schriftgröße verwenden, für die sie entwickelt wurde (oder ein ganzes Vielfaches davon, z. B. 2x, 3x, 4x), erhalten Sie garantiert pixelgenauen Text, für den kein Anti-Aliasing erforderlich ist. Dies bedeutet, dass Sie sich nie mit dem schrecklichen Anti-Aliasing auseinandersetzen müssen, das die Sprite-Schriften von XNA so schlecht und Nuclex so viel besser macht. ( Dieser Artikel untersucht dieses Problem und vergleicht sie)

doppelgreener
quelle