Nachdem ich eine Weile gesucht hatte, fand ich keine Möglichkeit, Vektor- / skalierbare Schriftarten in XNA 4.0 zu zeichnen (was perfekt wäre ...), und ich bin derzeit in der Klemme, wie Schriftarten für mein Spiel gerendert werden sollen.
Im Spiel verwende ich Schriftarten mit variabler Größe, die von sehr klein bis ziemlich groß reichen, und ich habe keine Ahnung, wie ich damit effizient umgehen soll.
Die einzige Möglichkeit, die ich derzeit erreichen kann, besteht darin, eine große Anzahl von SpriteFonts unterschiedlicher Größe zu laden, manuell die Schrift auszuwählen, die der gewünschten Größe am nächsten kommt, und dann die Größe mit einer Skala nahe 1 zu optimieren. (Auch eine Skala groß oder zu klein lässt die Schrift schrecklich aussehen.) Ich habe auch angefangen, den Nuclex-Schriftprozessor zu verwenden, wodurch die Schrift etwas besser aussieht, aber es ist offensichtlich nicht die Antwort auf mein Problem.
Gibt es wirklich keinen anderen Weg, um damit umzugehen?
Es scheint mir sehr seltsam, dass etwas so Aufwendiges und Gutes wie XNA 4.0 einen so tiefen Mangel an Werkzeugen für das Rendern von Schriftarten hat.
Dies ist derzeit ein ziemlich großes Problem für mich, daher sind jede Hilfe und jede Idee, wie ich damit umgehen oder sogar die Schmerzen lindern kann, sehr willkommen.
Antworten:
Dies ist kein leicht zu lösendes Problem. Wenn die Technik "Mehrere Sprite-Schriftarten" für Sie nicht funktioniert, gibt es in XNA keine andere integrierte Möglichkeit, um das zu erhalten, was Sie möchten. Sie müssen also eine benutzerdefinierte Entwicklung durchführen.
Eine Methode ist die Verwendung der Valve-Technik, wie in diesem Artikel beschrieben: Verbesserte Alpha-getestete Vergrößerung für Vektortexturen und Spezialeffekte . Dies beinhaltet speziell codierte Texturen und einen speziellen Pixel-Shader. Ich habe das schon einmal implementiert und es ist nicht allzu schwierig. Die Ergebnisse sind vernünftig, wenn auch nicht perfekt.
Eine weitere erwägenswerte Methode besteht darin, das Rendern von Schriftarten nach Windows zu verlagern (das Rendern von Schriftarten in eine Textur - genau wie die Inhaltspipeline zum Erstellen von Bitmap-Schriftarten). Dies hat den zusätzlichen Vorteil, dass Sie jedes Zeichen aus Ihrer Schriftart verwenden können und nicht nur das, was Sie in der Bitmap-Schriftart verfügbar haben. Wenn Sie ganze Zeichenfolgen auf einmal rendern, erhalten Sie eine angemessene Leistung, wodurch viele Internationalisierungsprobleme von Sprite-Schriftarten gelöst werden.
Eine andere Methode besteht darin, einfach Vektorschriftarten zu verwenden (mindestens über einem bestimmten Größenschwellenwert). Dies ist wahrscheinlich der einfachste Weg, um zu arbeiten - auf der Grundlage, dass Sie nur Nuclex.Fonts verwenden könnten .
Schließlich könnte dieser Beitrag für einige zusätzliche Ideen lesenswert sein.
quelle
public void DrawString ( SpriteFont spriteFont, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth )
Wenn mir nichts fehlt, ist DrawString skaliert.
quelle
scale
Parameter skaliert also diese Bitmap, was zu einem Qualitätsverlust führt, den er vermeiden möchte.