Mein UI-Designer hat eine schöne Photoshop-PSD der Benutzeroberfläche und alles hübsch gemacht. Das größte Problem besteht darin, einige der eleganteren Schriftarten in etwas zu konvertieren, das im Spiel gerendert werden kann. Gibt es eine Möglichkeit, diese Schriftstile in Photoshop in eine Art Bitmap-Schrift umzuwandeln?
Ich muss in der Lage sein, Text in meinem Code so zu rendern:
Antworten:
Okay, Sie werden mir verzeihen müssen, dass ich Ihnen keinen speziellen XNA-Code gegeben habe, da ich mich mit dieser Plattform nicht auskenne, aber was ich Ihnen sagen werde, sollte mit jeder Spiel-Engine funktionieren, mit der Sie Sprites zeichnen können.
Schriftarten sind nicht Ihr einziges Problem. Ich gebe Ihnen daher einen Rat und beantworte dann Ihre Frage. Mit diesen beiden Dingen sollten Sie in der Lage sein, eine Liebesbeziehung zu Ihrem GUI-Designer herzustellen, und Sie werden beide in der Lage sein, sehr glücklich Spiele zu machen.
Das erste ist, dass Sie sich mit Ihrem Designer zusammensetzen und sie bitten, Ihnen zwei Sätze von Dateien zu geben. Das erste ist eine Reihe transparenter Dateien, aus denen sich Ihre Benutzeroberfläche zusammensetzt (optimalerweise im PSD- oder DXT-Format). Für jede Schaltfläche, jedes feste Etikett, jeden Hintergrund, jeden Rahmen und jedes Textfeld erhalten Sie eine Datei (Sie können auch Texturatlas erstellen, ich empfehle dies jedoch, nachdem Sie Ihre GUI zusammengestellt und dann Ihre Quellkoordinaten beim Blitten angepasst haben). Nicht statischer Text sollte an dieser Stelle weggelassen werden (ich werde dies später noch einmal überprüfen).
Als zweites erhalten Sie das eigentliche GUI-Design, diesmal im Photoshop-Format. Für diese Datei werden Sie Ihren Designer bitten, das gesamte GUI-Design zu erstellen , wobei nur die Dateien verwendet werden, die Sie zuvor erhalten haben.
Sie wird dann jedes GUI-Element in eine separate Ebene legen und dabei keinerlei Effekte verwenden. Du wirst ihr sagen, dass sie dieses Pixel perfekt machen soll, denn die Orte, an denen sie alles ablegen wird, sind die Orte, an denen sich alles im endgültigen Spiel befinden wird.
Sobald Sie dies erhalten haben, drücken Sie für jede Ebene die Tastenkombination Strg-T und notieren im Infofenster (F8) die X- und Y-Koordinaten für jedes Element. Stellen Sie sicher, dass Ihre Einheiten auf Pixel eingestellt sind (Einstellungen-> Einheiten & Lineale-> Einheiten). Dies sind die Positionen, die Sie beim Zeichnen Ihrer Sprites verwenden werden.
Wie Sie jetzt sicher wissen, können Sie bei Schriftarten nicht erreichen, dass Ihre Schriftarten genau so aussehen, wie Sie sie in Photoshop mithilfe von Text-Rendering-APIs sehen. Sie müssen Ihre Glyphen vorrendern und dann programmatisch Ihre Texte zusammenstellen. Es gibt viele Möglichkeiten, dies zu tun, und ich werde die erwähnen, die ich benutze.
Als erstes rendern Sie alle Ihre Glyphen in eine oder mehrere Dateien. Wenn Sie sich nur für Englisch interessieren, reicht eine Textur für alle Glyphen aus. Wenn Sie jedoch einen erweiterten Zeichensatz möchten, können Sie mehrere Dateien verwenden. Stellen Sie einfach sicher, dass alle gewünschten Glyphen für die von Ihrem Designer gewählte Schriftart verfügbar sind.
System.Drawing
Um die Glyphen zu rendern, können Sie die Funktionen von verwenden , um die Schriftartmetriken abzurufen und Ihre Glyphen zu zeichnen:Damit haben Sie weiße Glyphen über einen transparenten Hintergrund in einer Reihe von PNG-Dateien gezeichnet und eine Indexdatei erstellt, die für jeden Codepunkt angibt, in welcher Datei sich die Glyphe befindet, wo sie sich befindet und welche Abmessungen sie haben. Beachten Sie, dass ich auch zwei zusätzliche Pixel anbringe, um die einzelnen Glyphen zu trennen (um weitere Effekte zu erzielen).
Nun legen Sie jede dieser Dateien in Photoshop ab und führen alle gewünschten Filter aus. Sie können Farben, Ränder, Schatten, Konturen und alles andere festlegen, was Sie möchten. Stellen Sie einfach sicher, dass sich die Glyphen durch die Effekte nicht überlappen. Passen Sie in diesem Fall den Abstand an, rendern Sie erneut, spülen Sie und wiederholen Sie den Vorgang. Speichern Sie als PNG oder DXT und fügen Sie zusammen mit der Indexdatei alles in Ihr Projekt ein.
Zeichentext sollte sehr einfach sein. Suchen Sie für jedes Zeichen, das Sie drucken möchten, die Position anhand des Index, zeichnen Sie es, verschieben Sie die Position und wiederholen Sie den Vorgang. Sie können auch den Abstand, das Kerning (tricky), den vertikalen Abstand und sogar die Farbe anpassen. In lua:
Und los geht's. Wiederholen Sie diesen Vorgang für jede andere Schriftart (und auch für die optimale Größe).
Bearbeiten : Ich änderte den Code zu verwenden ,
Graphics.MeasureString
statt ,TextRenderer.MeasureText()
weil sie beiden unterschiedlichen Messsysteme verwenden, und kann zu Inkonsistenzen zwischen der gemessenen Glyphe führen und der gezogene ein, insbesondere mit überhängenden Glyphen in einigen Schriftart gefunden. Mehr Infos hier .quelle
Nun, wie jemand anderes in XNA sagte, erledigt Spritefont das schwere Heben für Sie. Auf der Creators Club-Website gibt es einen Exporter für Bitmap-Schriftarten, der Schriftbilder im XNA-Stil exportiert. ( http://xbox.create.msdn.com/en-US/education/catalog/utility/bitmap_font_maker ) Dann können Sie es in Photoshop oder was auch immer öffnen und es hübsch aussehen lassen. Von dort aus fügen Sie die Textur Ihrem Inhaltsprojekt hinzu und wählen im Inhaltstyp die Sprite-Schriftart-Textur aus. In Ihrem Code laden Sie es wie eine normale Sprite-Schriftart
(Beispiel: http://www.youtube.com/watch?v=SynGWrWYUQI )
quelle
Die Lösung ist recht einfach und wird von einer Vielzahl von Spielen verwendet. Sie müssen Ihre Schriften nur so behandeln, als wären sie Sprites.
Lassen Sie Ihren Designer die gesamte Reihe von Zahlen und Buchstaben zeichnen, die Sie in Ihrem Spiel verwenden möchten. Rendern Sie sie dann in statische Bilder unterschiedlicher Größe (.png, .bmp, unabhängig vom verwendeten Format). Sie werden so etwas haben:
Jetzt müssen Sie nur noch jeden Buchstaben von Ihrem "Zeichensatzblatt" rendern, als wäre es ein Sprite auf dem Bildschirm. Es ist sicherlich hilfreich, eine Hilfsklasse für die Übersetzung zwischen Zeichenfolgen und Sprites zu erstellen.
Meine Implementierung ist komplexer, aber praktisch. Das Font Sheet ist wie das obige Bild aufgebaut und enthält mehrere Fonts in einer .png-Datei. Ich habe eine
.ini
Datei, die die Buchstaben der einzelnen Schriften zusammen mit ihrer Breite und Höhe einer Position auf dem Blatt zuordnet. Dies lässt meinen Designer (und mich) verrückt nach coolen Schriftarten werden, ohne dass er irgendeinen Code anfassen muss. Wenn eine Zeichenfolge auf den Bildschirm zeichnen, habe ich eine Methode , die Blicke auf die Schrift und denchar
aus der INI - Datei , die Position und die Grenzen des Schreibens des Schriftenblatt zu erhalten, dann das ziehe ich nurTexture2D
mitSpriteBatch.Draw()
der Quelle unter VerwendungRectangle
des Buchstabens fraglich.quelle
Die Benutzeroberfläche ist ein umfangreiches und komplexes Thema. Das Rendern von Schriftarten ist ein schwieriger Teil. Ich rate Ihnen, eine bereits vorhandene Bibliothek zu verwenden, mit der Sie Flash- oder HTML-Inhalte im Spiel anzeigen können, anstatt alles selbst zu wiederholen.
Awesomium sieht vielversprechend aus und sollte mit XNA zusammenarbeiten , damit Sie es ausprobieren können. Es ist kostenlos für nichtkommerzielle Spiele oder wenn Sie nicht viel Geld verdienen:
quelle
Wenn Sie nach schickeren Effekten als dem normalen .spritefont-Importer suchen, können Sie versuchen, nach einem "Bitmap-Font-Generator" zu suchen.
Persönlich bevorzuge ich dieses: http://www.ironstarmedia.co.uk/2010/01/free-game-dev-utility-fancy-bitmap-font-generator/
Einige andere Ideen:
quelle
XNA
erledigt die ganze harte Arbeit für Sie. Mit könnenSpritefont
Sie auf einfache Weise eine Schriftartdatei auf Ihrem Computer in die Art von Sprite-Sheet konvertieren, nach der Sie fragen, indem Sie eine XML-Datei definieren.Sobald Sie die XML-Datei zu Ihrem Content-Projekt hinzugefügt haben, laden Sie sie mit den
ContentManager
folgenden Elementen :Hier ist ein Beispiel einer .spritefont-Datei aus meinem Inhaltsprojekt:
quelle
Ich bin mir nicht sicher, da ich es nie benutzt habe, aber die Leute haben mir vorgeschlagen, Glyph Designer zu verwenden. Hier ist ein Video-Tutorial:
http://vimeo.com/32777161
Hier wird diskutiert , Photoshop zu erwähnen.
Es gibt Leute, die auch den Hiero-Schrifteditor verwenden .
Auf dieser Website finden Sie eine Liste anderer Schrifteditoren, die Sie sich ansehen möchten.
Lass mich wissen, welches für dich am besten funktioniert :)
quelle