
Eine Text-Display-Bibliothek dreht sich um ein Etikett, das im Laufe der Zeit mit Effekten und Stilen druckt.
Mit anderen Worten, dies bringt mehr Merkmale für die Textrender in libgdx.
Wie sieht das aus? Ein bisschen so etwas ...
Oder vielleicht so ...

Wenn Sie sich lieber ein Video ansehen, als diesen Text zu lesen, hat Raymond "Raeleus" Buckley ein Video gemacht, das den größten Teil des Textratypisten abdeckt! Es deckt einige Dinge ab, die diese Datei nicht wie die Verwendung des Hautkomponisten abdeckt. Es ist also eine gute Uhr, egal.
Hier gibt es ein "normales" Label in Form von Textralabel, das in Szene2d.ui fast genau wie das Label wirkt, aber die unten abgedeckten Stile ermöglicht. Eine Menge Nutzung kann jedoch TypingLabel bevorzugen!
TypingLabel ist ein ziemlich normales Szene2d.Ui -Widget und erweitert Textralabel. Es wird jedoch einzeln auf den Bildschirm auf den Bildschirm gebracht, es sei denn, es wird angewiesen, voranzukommen. Dies ist ein nostalgischer Effekt, der in vielen älteren texthaarigen Spielen zu finden ist, und es sieht so aus, als würde ein Schreibmaschine jeden Buchstaben mit langsamer als interstantaner Geschwindigkeit aufstellen.
Ja, es hat mehr als den Schreibmaschinenmodus! Der Text kann oben hängen und dann eingesetzt werden. Es kann in einer langen Welle auf und ab springen. Es kann schwanken und schaudern, als wäre es krank. Es kann in verschiedenen Farben blinzeln, sich in einem Gradienten reibungslos zwischen zwei Farben bewegen oder über einen ganzen Regenbogen gehen. Viele Optionen; Viel Spaß. Die Effekte sind fast die gleichen wie bei der Typing-Label, aber es gab einige Änderungen und Ergänzungen. Weitere Informationen können Sie das Textratypist -Wiki überprüfen.
Ab 0,10,0 gibt es viele neue Effekte. Ruck, Spirale, Spin, Publikum, Schrumpfen, Taucher, Herzschlag, Karussell, Kürbis, Skalierung, Drehung, Aufmerksamkeit, Highlight, Link, Trigger, Stylist, Kanonen, Ozean, Sputter und Instant sind alle neu in Textratypisten (nicht in der Typing-Label). Auf der Seite Textratypist Wiki finden Sie Nutzungsanweisungen und Beispiel -GIFs. Die meisten dieser Effekte verwenden die sanften Skalierungs- und Rotationsoptionen, die die Effekte ab dem Textratypist 0.5.1 verwenden können. Einige verwenden die Mausverfolgung, neu in 0,7,0, z. B. wie Link auf einen Klick auf einen Textbereich reagiert.
Möglicherweise möchten Sie TypingLabel erstellen, auch wenn Sie den Tippeffekt nicht benötigen, da TextraLabel keine Effekte behandelt. Sie können skipToTheEnd() auf einem Typinglabel oder (in 0,7,0 und up) in einigen anderen Klassen aufrufen, damit ein TypingLabel für noch Text mit Effekten verwendet werden kann.
Es sind auch verschiedene Standard -Token vorhanden, die den Typisierungseffekt, den variablen Austausch und andere nützliche Dinge manipulieren können:
{WAIT=f} führt dazu, dass der Typing -Effekt als Float auf f -Sekunden innehalten und wartet.{SPEED=f} ändert die Zeit, die zum Eingeben eines typischen Glyphs benötigt wird, von einem Standard von 0.035 bis f{SLOWER} lässt alle Glyphen 2x so lange dauern, um einzugeben.{SLOW} lässt alle Glyphen 1,5x so lange dauern, um zu tippen.{NORMAL} lässt alle Glyphen den normalen 1x so lange zum Typ nehmen.{FAST} lässt alle Glyphen 0,5x so lange dauern, um einzugeben.{FASTER} lässt alle Glyphen 0,25x so lange dauern, um zu tippen.{NATURAL=f} lässt Glyphen zufällig mehr oder weniger Zeit nehmen, um zu tippen, aber ansonsten ist dieselbe wie {SPEED=f} .{COLOR=s} ändert die Farbe des Textes; Dies hat viele Optionen, sodass Sie z. B. "dunkelgrau Pink" haben können.{STYLE=s} ändert den Textstil (siehe unten); Dies hat viele Optionen.{SIZE=f} ändert die Textgröße (grob in 25% Schritten); Dies dauert F von 0 bis 375 Prozent.{FONT=name} ändert die Schriftart, wenn eine Schriftfamilie verfügbar ist, indem Sie name nachschlagen.{CLEARCOLOR} Legt die Textfarbe auf die Standardfarbe fest, die normalerweise weiß ist.{CLEARSIZE} setzt die Größe auf 100%.{CLEARFONT} setzt die Schriftart auf die ursprüngliche Schriftart (nicht mit der Schriftfamilie).{ENDCOLOR} legt die Textfarbe auf die Standardfarbe fest, die normalerweise weiß ist. Dies ist dasselbe wie {CLEARCOLOR} .{VAR=name} wird durch die Zeichenfolge ersetzt, die dem variablen name zugeordnet wurde.{IF=name;choice0=cat;choice1=b;=default} prüft den variablen Namen und vergleicht ihn mit jeder Wahl im Token.name Wert zu einer Auswahl entspricht, wird das Token durch den Wert der Wahl ersetzt, wie z. B. cat .default verwendet.{EVENT=name} löst ein Ereignis aus und sendet name an den TypingListener, wenn das Typing diesen Punkt erreicht.{RESET} Legt alle Formatierungs- und Geschwindigkeitsänderungen an ihren Anfangswerten fest.label.setDefaultToken() kann verwendet werden, um die Anfangswerte zu ändern, sodass Text standardmäßig auf verschiedene Einstellungen verwendet werden.{SKIP=n} überspringt im Tipp -Effekt und zeigt sofort n -Zeichen an. Effekte verwenden standardmäßig Curly [-EFFECT] Zahnspangen, aber wenn lockige Klammern keine gute Option für Ihren Text (z {EFFECT}
Diese Bibliothek erweitert das, was das ursprüngliche Typing-Label tun kann-sie ermöglicht es, Stile auf Text anzuwenden, wie z. B. mutige, unterstreichende, schräg, superscript usw. im Zusammenhang mit Stilen sind Skalenänderungen, die Text schrumpfen oder vergrößern können, ohne Ihre Schriftart zu ändern, und die Funktion "Schriftfamilie". Einer Schriftart einer Schrift kann eine "Familie" anderer Schriftarten und Namen zugewiesen werden, um sich auf sie zu beziehen. Dies wirkt wie ein normaler Stil, ändert jedoch tatsächlich, was Schriftart zum Zeichnen verwendet wird. Die vollständige Liste der Stile ist lang, ist aber nicht so detailliert wie die Effekt -Token. Sie können Stile mit so etwas wie libgdx -Farbmarkup in quadratischen Klammern wie [*] aktivieren oder (wenn das Markup in einem TypingLabel verwendet wird) Sie können {STYLE=BOLD} verwenden, um dasselbe zu tun. Tags und Stilnamen sind beide von Fall unempfindlich, aber Farbnamen sind Fallempfindlichkeit. Die Square-Backet-Syntax verwendet hauptsächlich Interpunktion und ist von der Markdown-Syntax (die unter anderem von GitHub verwendet) inspiriert.
In der folgenden Liste sieht jeder Eintrag so aus wie:
[*] Schaltet den kräftigen Modus um. Kann Stilnamen verwenden * , B , BOLD , STRONG .
Das {STYLE=BOLD} {STYLE=B} Sie können immer [*] {STYLE=*} , um den mutigen Modus ein- oder {STYLE=STRONG} .
Die vollständige Liste der Stile und verwandten Square-Spur-Tags:
[] Die letzte Änderung des Stils/Farbes/Formatierens entblößt die letzte Änderung, obwohl es nichts für Typinglabel -Effekte bewirkt.[] im libgdx bitmapfont markup, funktioniert aber mehr als Farben.[ ] Setzt alle Stile/Farben/Formatierung und Effekte in den Anfangszustand zurück.[] in das neue [ ] ändern.[(label)] speichert den aktuellen Formatierungszustand vorübergehend als label , sodass er später neu angewendet werden kann.label kann jede alphanumerische Zeichenfolge sein. Es sollte wahrscheinlich keine Leerzeichen haben, kann aber Unterstriche haben.[ label] Anwendung des Formatierungsstatus, der als label gespeichert ist, falls eine vorhanden ist.[*] Schaltet den kräftigen Modus um. Kann Stilnamen verwenden * , B , BOLD , STRONG .[/] schalten den Schrägmodus (wie Kursivschrift) um. Kann Stilnamen verwenden / , I , OBLIQUE , ITALIC .[^] Umschaltet den Superscript -Modus (und schaltet den Einweis oder den Midscript -Modus aus). Kann Stilnamen verwenden ^ , SUPER , SUPERSCRIPT .[=] Schaltet den Midscript -Modus um (und schaltet den Superscript- oder Index -Modus aus). Kann Stilnamen = , MID , MIDSCRIPT verwenden.[.] Schaltet der Einweismodus um (und schaltet den Superscript- oder Midscript -Modus aus). Kann Stilnamen verwenden . , SUB , SUBSCRIPT .[_] Umschaltet den unterstreichenden Modus. Kann Stilnamen _ , U , UNDER , UNDERLINE .[~] Umschalten der Modus von Streikhrough. Kann Stilnamen verwenden ~ , STRIKE , STRIKETHROUGH .[!] Schaltet den gesamten oberen Fallmodus um (ersetzen Sie einen anderen Fallmodus). Kann Stilnamen verwenden ! , UP , UPPER .[,] Schaltet den gesamten unteren Fallmodus um (ersetzen Sie einen anderen Fallmodus). Kann Stilnamen verwenden , LOW , LOWER .[;] Umschaltungen nutzen jeden Wortmodus (ersetzen Sie einen anderen Fallmodus). Kann Stilnamen verwenden ; , EACH , TITLE .[%DDD] , wobei DDD von 0 bis 375 einen Prozentsatz hat, skaliert Text zu diesem Mehrfach. Kann mit {SIZE=150%} , {SIZE=%25} oder ähnlich {STYLE=200%} oder {STYLE=%125} verwendet werden. Entfernt jeden speziellen Modus.[%] Setze in den eigenen Sätzen Text an der Standard -100% -Skala und beseitigt jeden speziellen Modus. Kann mit {STYLE=%} verwendet werden.[%?MODE] entfernt die Skala und legt einen speziellen Modus fest. Modi sind unten aufgeführt.[%^MODE] entfernt die Skala und legt einen speziellen Modus gleichzeitig mit dem Small-Caps-Modus fest. Modi sind unten aufgeführt.[@Name] , wobei der Name ein Schlüssel/einen Namen in der family dieser Schrift ist, wechselt die aktuelle Schrift auf den benannten. Kann mit {STYLE=@Name} verwendet werden.[@] Setzt die Schrift allein in diese Schriftart zurück und ignoriert ihre Familie. Kann mit {STYLE=@} verwendet werden.[#HHHHHHHH] , wo hhhhhhhh ein hex rgb888 oder rgba8888 int Farbe ist, verändert die Farbe. Dies ist ein normales {COLOR=#HHHHHHHH} -Tag.[COLORNAME] , in dem Colorname ein Farbname oder eine Beschreibung ist, die extern nachschlagen wird, ändert die Farbe.ColorUtils.describe() nach, der versucht, Farben aus Palette nach Namen zu finden, und ermöglicht auch die Beschreibung von Farben oder einfachen Änderungen wie "Licht" oder "stumpf".Colors Klasse von libgdx sowie etwa 50 zusätzlichen Farbnamen in Kleinbuchstaben (aus farbenfrohen GDX).Palette mit Hue, durch Leichtigkeit oder mit Namen vorschauten.[RED] , [green yellow] , [light blue] , [duller orange] , [darker rich BLUE lavender] , [pale pink orange] und [deeper green navy] .setColorLookup() Font mit Ihrer eigenen ColorLookup -Implementierung verwenden, um das zu tun, was Sie hier wollen.| optional vorangegangen sein , was es ermöglicht, Farben mit Namen zu suchen, die Interpunktion enthalten. Zum Beispiel würde [|;_;] eine Farbe genannt ;_; , "Die Farbe der Traurigkeit" und würde nicht wie [;] handeln.ColorLookup kann auch nicht ColorLookup.INSTANCE , das in den Libgdx-Farben-Klasse wörtlich nachsieht.{COLOR=lighter orange-red} Tag verwendet werden, wie {COLOR=SKY} {GRADIENT}[+region name] , wobei der Regionenname der Name eines Textureregion aus einem registrierten Texturureatlas ist, ändert den Stil nicht, sondern wird diese Textureregion in einer Line mit dem Text produzieren.KnownFonts.addEmoji() Fonts verwendet.[+saxophone] und [+?] Jeweils eine Saxophon -Symbol.[+call me hand, medium-dark skin tone] und [+??] .KnownFonts.addGameIcons() . Diese verwenden dieselbe Syntax: [+crystal-wand] .[-SOME_EFFECT] entspricht der Verwendung von lockigen Zahnspangen um SOME_EFFECT . Beachten Sie den hinzugefügten Dash.Die speziellen Modi, die anstelle der Skalierung verwendet werden können, sind:
black outline oder blacken , der mit den Stilnamen BLACK OUTLINE oder BLACKEN verwendet werden kann.white outline oder whiten , der mit den Stilnamen WHITE OUTLINE oder WHITEN verwendet werden kann.shiny , der mit den Stilnamen SHINY , SHINE oder GLOSSY verwendet werden kann.drop shadow oder shadow , der mit den Stilnamen SHADOW , DROPSHADOW oder DROP SHADOW verwendet werden kann.error , der mit dem Fehlerstilnamen ERROR , REDLINE oder RED LINE verwendet werden kann.Font.PACKED_ERROR_COLOR geändert werden.warn , die mit den Stilnamen verwendet werden kann. WARN , YELLOWLINE oder YELLOW LINE .Font.PACKED_WARN_COLOR geändert werden.note , die mit den Stilnamen NOTE , INFO , BLUELINE oder BLUE LINE verwendet werden können.Font.PACKED_NOTE_COLOR geändert werden.jostle , der mit den Stilnamen verwendet werden kann, JOSTLE , WOBBLE oder SCATTER .[%?] Verwendet werden.small caps , die mit den Stilnamen SMALLCAPS oder SMALL CAPS verwendet werden können.[%^] verwendet werden. Es kann nicht mit der Syntax [%?small caps] verwendet werden; Es braucht eine Pflege. Der kleine Kappenmodus kann mit einem der anderen Modi mit Ausnahme von Jostle verwendet werden, indem Sie %? bis %^ . Abgesehen davon können gleichzeitig keine zwei Modi aktiv sein, und es können keine Modi gleichzeitig mit der Skalierung verwendet werden.
Beachten Sie, dass Modi eine leicht unterschiedliche Syntax verwenden, um zu vermeiden, dass sie mit Farbnamen verwechselt werden. Bei der Verwendung von Quadratklammern sollte jeder der hier angegebenen Namen in niedrigerer Fall %? Meistens (kleine Kappen und Rüschen sind etwas Besonderes). Um den Red-Underline-Modus "Fehler" zu aktivieren, verwenden Sie das Square-Pracket-Tag [%?error] . Wenn Sie das Curly-Brace-Markup für TypingLabel verwenden, verwenden Sie die hier angegebenen Namen in oberen Fällen und können sie wie andere Style-Namen verwenden: {STYLE=ERROR} zum Beispiel. Der kleine Kappenmodus ist, wie erwähnt, besonders; Es ist normalerweise mit [%^small caps] aktiviert, kann aber auch mit [%^] aktiviert werden und kann auch mit einem anderen Modus gemischt werden, mit Ausnahme des Normalwerts durch den normalen %? bis %^ . Wenn kleine Kappen aktiv sind, verwendet das Quadrat-Spur-Tag %^ anstelle von %? . Der Jostle -Modus ist ebenfalls besonders; Es ist normalerweise mit [%?jostle] aktiviert, kann aber auch mit [%?] für sich genommen aktiviert werden. Jostle kann nicht mit kleinen Kappen gemischt werden.
Die speziellen Modi sind in Bezug auf die Syntax etwas überkundigt, da ich aus der Interpunktion herausgegangen bin, die ich verwenden konnte. Das gemeinsame Beispiel für einen schwarzen Umriss um weiße Text kann mit [WHITE][%?blacken]Outlined![%][GRAY] erreicht werden. (Das Beispiel verwendet GRAY als normale Farbe, aber Sie können auch [ ] verwenden, um die Farbe auf die Basisfarbe zurückzusetzen, die auf einem Layout konfiguriert wurde, oder das Beschriftung, das sie hält. Beachten Sie, dass [ ] auch die Größe, den Modus und, alles na ja, alles zurücksetzt.)
Mehrere Effektkombinationen sind unter Verwendung der Syntax {VAR=ZOMBIE}urgh, brains...{VAR=ENDZOMBIE} :
{VAR=FIRE} ändert den folgenden Text, um feurige Farben zu wechseln. Sie können es mit {VAR=ENDFIRE} beenden.{VAR=SPUTTERINGFIRE} ändert den folgenden Text, um feurig wechselnde Farben zu haben und die Größenänderung wie das Knallen von Flammen zu haben. Sie können es mit {VAR=ENDSPUTTERINGFIRE} beenden.{VAR=BLIZZARD} ändert den folgenden Text, um im Wind zu schwanken und eisige Farben weiß bis hellblau zu verwenden. Sie können es mit {VAR=ENDBLIZZARD} beenden.{VAR=SHIVERINGBLIZZARD} ändert den folgenden Text, um im Wind zu schwanken und eisige Farben weiß bis hellblau zu verwenden. Sie können es mit {VAR=ENDSHIVERINGBLIZZARD} beenden.{VAR=ELECTRIFY} ändert den folgenden Text in eine stumpfe graue lila Farbe und lässt zufällig Glyphen hellgelb werden und vibrieren herum. Sie können es mit {VAR=ENDELECTRIFY} beenden.{VAR=ZOMBIE} ändert den folgenden Text, um "dunkler Olivener Salbei" (eine mattgraugrüne Farbe) zu sein, die Glyphen nach links und rechts und zufällig drehen, Glyphen fallen ab und steigen zufällig wieder hoch und wenn sie zum ersten Mal erscheinen, entstehen die Glyphen aus dem Basis (wie IF-Klwege aus einem Grave). Sie können es mit {VAR=ENDZOMBIE} beenden. Diese werden in TypingConfig.initializeGlobalVars() definiert, und Sie können Ihre eigenen Kombinationen genauso definieren, wie diese definiert werden. Zum Beispiel wird FIRE mit definiert mit
TypingConfig . GLOBAL_VARS . put ( "FIRE" , "{OCEAN=0.7;1.25;0.11;1.0;0.65}" );
TypingConfig . GLOBAL_VARS . put ( "ENDFIRE" , "{ENDOCEAN}" ); Es ist dem OCEAN egal, welche Farben er verwendet. Es definiert nur ein ungefähres Muster für den Übergang zwischen diesen Farben. Das bedeutet, dass FIRE eher mit OCEAN als GRADIENT umgesetzt wird. Die Verwendung des Namens FIRE ist OCEAN wahrscheinlich vorzuziehen, sodass der globale VAR aus diesem Grund hier ist.
Die Möglichkeit, Formatierungszustände mit einem Etikett zu speichern, ermöglicht eine komplexere Montage von Markup -Zeichenfolgen aus mehreren Quellen. Sie können so etwas wie font.storeState("spooky", "[/][darker gray][@?blacken]") nennen, um diesen Zustand (schräg dunklerer grauer Text mit einem schwarzen Umriss) in font dauerhaft zu speichern und dann auf diesen Zustand zurückzutreten, indem Sie [ spooky] (Noten den Öffnungsraum) zurücksetzen. Sie können auch einige einfügungsfähige Text erstellen, in der die aktuelle Formatierung gespeichert wird, bevor er etwas schreibt, und die Formatierung beim Schreiben zurückzusetzen. Das würde so etwas wie "[(previous)][ ][BLUE][^][[citation needed][ previous]" verwenden - wenn diese Zeichenfolge in die Mitte eines größeren Textblocks eingefügt wird, ändert sie nicht die umgebende Formatierung, sondern wird blau -superkripte für seinen eigenen Text (das unsterbliche [citation needed] verwendet. Wenn Sie mehrere State-Shop-Tags mit demselben Etikett haben, ändert sich der mit dieser Etikett zugeordnete Wert, wenn diese Tags auftreten. Möglicherweise möchten Sie einzigartige Etiketten verwenden, um zu vermeiden, dass das Wert eines anderen Etiketts versehentlich geändert wird. Dies ist jedoch normalerweise nicht erforderlich.
Textratypist nutzt seine neue Font , die eine vollständige Überholung der Bitmapfont von libgdx ist, die im Wesentlichen keinen Code mit seinem Vorfahren teilt. Eine Schriftart hat verschiedene Qualitäten, die mehr Kraft als Bitmapfont verleihen, die hauptsächlich aus dem Speichern der Glyphenbilder als Textureregionen in einer Karte abgeleitet sind. Es gibt nichts ausschließlich, Sie daran zu hindern, Ihre eigenen Bilder zur mapping einer Schriftart hinzuzufügen, solange sie über die erforderlichen Informationen verfügen, die als Textglyphe verwendet werden sollen, und diese Bilder dann mit Ihrem Text einfügen. Dies wird zur Implementierung von Emoji als Beispiel verwendet und kann für benutzerdefinierte Symbole und Emoji verwendet werden.
Textratypist unterstützt Standard -Bitmap -Schriftarten und auch Distanzfeldkripten unter Verwendung von SDF oder MSDF. TypingLabel aktiviert automatisch dem ShaderProgram, dass der entsprechende Abstandsfeldtyp (falls er benötigt wird) und deaktiviert es nach dem Rendern. Sie können dieses Verhalten ändern, indem Sie die Methode Batch.setShader() Font.enableShader(Batch) . Beachten Sie, dass SDF- und MSDF -Schriftarten über Änderungen an der Bildschirmgröße unter Verwendung resizeDistanceField() Font.resizeDistanceField() . Seit 1.0.0 möchten Sie normalerweise die Überlastung verwenden, die ein Viewport benötigt. Wenn Sie kein Viewport haben, benötigen Sie diese Überladung nicht. Jede Distanzfeldschrift, die Sie derzeit rendern, muss die Entfernungsfeld angepasst werden, wenn das Fenster in ApplicationListener.resize() geändert wird.
In KnownFonts gibt es mehrere vorkonfigurierte Schrifteinstellungen; In der Dokumentation für jeden Schriftart Getter wird angegeben, welche Dateien erforderlich sind, um diese Schriftart zu verwenden. Die alten .fnt -Dateien wurden hierher verschoben . Hier sehen Sie Voransichten und Beschreibungen aller bekannten Schriftarten. Es ist für viele Schriftarten seit Version 1.0.0 nicht erforderlich, da die .dat Die Vielfalt der Schriftarten ist nicht erstaunlich, sollte aber ein guter Ausgangspunkt sein. Eine schöne Sache zu beachten ist die KnownFonts.getStandardFamily() , die 16 Schriftarten in Ihren Vermögenswerten erfordert, aber Sie können natürlich zwischen einer dieser 16 Schriftarten mit der [@Medieval] -Syntax wechseln (wo mittelalterlich einer der Namen, die es kennt, in diesem Fall für "Kingthings Foundation").
Die Schriftarten hier verwenden die .DAT -Dateierweiterung (dh nur Binärdaten ohne bestimmte Dateiformat). Es handelt sich um komprimierte Versionen größerer .json -Schriftarten, die von Fontwriter produziert werden. Die Komprimierung, die sie verwenden, ist GWT-kompatibel, sodass diese .DAT-Dateien auf allen Plattform-LIBGDX-Zielen verwendet werden können. Sie können immer noch die älteren .fnt -Dateien ohne Probleme verwenden, und einige .fnt -Dateien werden hier noch verwendet (hauptsächlich für Pixel -Schriftarten). Mit jeder Schriftart benötigen Sie im Allgemeinen auch ein .png, obwohl es sich in einem Atlas befinden kann.
Die Lizenzdateien für jede Schriftart sind in denselben Ordner in knownFonts enthalten. Alle hier bereitgestellten Schriftarten wurden überprüft, um sicherzustellen, dass ihre Lizenzen die kommerzielle Nutzung ohne Gebühren erlauben, und alle tun dies. Die meisten erfordern eine Zuordnung; Überprüfen Sie die Lizenzen für Details.
Bekanntefonts enthält verschiedene andere Möglichkeiten, vorhandene Schriftfälle zu konfigurieren, indem die Glyphen, die sie kennen, ein Texturateatlas hinzufügen. Dies beinhaltet ein paar vorhandene Texthause von Ikonen und ... Emoji!
Die Twemoji-Ikonen sind auch in einem Atlas von über-3000 32x32-Bildern vorhanden; KnownFonts.addEmoji() [+name] In ähnlicher Weise stammen ein Atlas von über-4000 60x60-Symbolen von game-icons.net, und KnownFonts.addGameIcons() können sie mit einer Schriftart registrieren. Sowohl Twemoji- als auch Game-ICons.net-Atlasen können nicht gleichzeitig in einer Schriftart registriert werden. Der Teil des Unicode, den sie sicher nutzen können, gibt nicht genug freien Platz. Ein Weg um diese Weise besteht darin, die Fontfamily -Funktion zu verwenden und eine Schriftart nur für Symbole oder nur für Emoji zur Familie hinzuzufügen. Dafür gibt es eine vorhandene Methode; Mit KnownFonts.getGameIconsFont() [@Icons][+rooster][@] ist ein kurzes Beispiel dafür, wie Sie zu der Schrift wechseln können, die von getGameIconsFont() produziert wird, ein Symbol zeichnen und zurückschalten.
Hier gibt es Voransichten für Twemoji, wobei der Emoji -Zeichen und den Namen jedes Bild nachschlagen. Ebenso gibt es hier Vorschau für Game-Icons.net-Symbole, wobei nur der Name erforderlich ist, um jedes Bild nachzuschlagen. Denken Sie daran, dass Sie, weil die Bilder von Game-Icons.net-Bildern mit Transparenz rein weiß sind, jede Farbe, die Sie mit dem Standard [RED] , [light dull green] oder [#0022EEFF] -Syntax wünschen.
Die Lizenzdateien für Twemoji und die Bilder von Game-ICons.net sind in knownFonts neben den Lizenzdateien für Schriftarten enthalten. Während Twemoji einfache Anforderungen an die Zuschreibung hat, erfordert Game-ICons eine Zuordnung zu einigen einzelnen Mitwirkenden. Sehen Sie sich das Ende dieses Dokuments für die Liste an, die Sie kopieren können und sollten, um allen zu krednen.
Es gibt auch Emoji von OpenMoji und Vollfarbversionen desselben Emoji. Diese können besser zu den Kunststilen bestimmter Projekte passen.
Sie können einzelne Glyphen (wenn Sie sie einzeln zeichnen) oder ganze Textblöcke als Layout drehen, wobei eine optionale Überladung von Font.drawGlyph() Font.drawGlyphs() Benutzerdefinierte Effekte für TypingLabel können auch die Drehung von Glyphen sowie seine Position und Skalierung auf x und/oder y individuell verändern. Sie können ein Textralabel oder TypingLabel mithilfe ihrer setRotation() -Methoden rotieren, und die Rotation wirkt nun für Etiketten mit Hintergründen und/oder mit unterschiedlichen Ausrichtungseinstellungen korrekt. Der Ursprung für Rotationen kann in das Etikett eingestellt werden, und das gesamte Etikett dreht sich um diesen Ursprungspunkt.
Sie können auch für einige Schriftarten Box-Drawing-Zeichen und Blockelemente automatisch generiert haben. Dies erfordert ein solides weißes Blockcharakter (in jeder Größe, typischerweise 1x1), die in der Schriftart bei ID 9608 (dem Unicode Full Block Index, 'u2588' ) vorhanden sind. Dies ermöglicht auch eine bessere Garantie für die ordnungsgemäße Verbindung von Unterstrichen und Streikfaktoren und ohne sich zu verschmpfen, wo sich zwei Unterstriche oder Bindestriche gegenseitig überlappen. Font versucht, dies in einigen Fällen zu aktivieren, oder es kann mit einem Parameter festgelegt werden. Wenn es jedoch fehlschlägt, fällt es zurück in die Unterstriche für Unterstrahlung und Bindestriche für Striiken. Alle Schriftarten in KnownFonts sind entweder so konfiguriert, dass sie einen soliden Block verwenden, oder um diese ausdrücklich zu vermeiden, da diese Schriftart ohne ihn besser wird. Beachten Sie, dass wenn Sie eine Font aus einer libgdx BitmapFont erstellen, diese Standardeinstellungen nicht einmal versuchen, Gitterglyphen herzustellen, da Bitmapfonts selten einen geeigneten festen Blockchar haben.
Eine zusätzliche Konfiguration ist für Box -Zeichnungszeichen möglich, die tatsächlich für diesen Zweck verwendet werden (nicht nur unterstreicht oder streift). Sie können boxDrawingBreadth auf eine Font auf einen Multiplikator einstellen, um die Box-Drawing-Linien dicker oder dünner zu machen, ohne wie sie sich miteinander verbinden.
Verschiedene Funktionen ermöglichen hier zusätzliche Konfiguration. Sie können boldStrength auf einen anderen Wert als den Standard -1 setzen, wenn Sie mehr oder weniger zusätzliche Speicherplatz aus dem fett gedruckten Stil angewendet haben. Sie können auch obliqueStrength einstellen, um den Winkel des Schrägs zu ändern, mit dem schrägen Text gezeichnet wird. Farben für verschiedene Effekte können nach Bedarf geändert werden. font.PACKED_SHADOW_COLOR kann beispielsweise eine dunklere, leichtere, undurchsichtigere oder transparentere Schattenfarbe verwendet werden. font.PACKED_BLACK beeinflusst den schwarzen Umrissmodus, und font.PACKED_WHITE wirkt sich auf die weißen Umriss und die glänzenden Modi aus. Es gibt ähnliche Modi, um die Farben des Fehlers, der Warnung und der Notiz zu ändern. Alle diese Farbkonfigurationen gelten pro Schriftinstanz, sodass Sie zwei Schriftobjekte mit derselben Schriftart, jedoch mit unterschiedlichen Farben konfiguriert haben können.
Ab der Veröffentlichung von 0.4.0 gibt es verschiedene Widgets, die ihre Kollegen scene2d.UI ersetzen und Label gegen TextraLabel ausgetauschen, sodass Sie Markup verwenden können. Die Widgets sind ImageTextraButton , TextraButton , TextraCheckBox , TextraDialog , TextraLabel , TextraListBox , TextraTooltip und TextraWindow sowie alternative Versionen von jedem, die ein TypingLabel anstelle eines TextraLabel verwenden und in ihren Namen Typing .
Während TextArea noch kein Gegenstück zu TextArea unterstützt hat und einfach noch nicht funktioniert hat. TextraLabel stellt die Unterstützung mehrerer Zeilen aus und kann möglicherweise für eine gewisse Verwendung stehen. TypingLabel ermöglicht auch die Eingangsverfolgung, sodass Sie sie verwenden können, um ausgewählbare Textregionen zu erstellen - lesen Sie weiter!
Die Eingangsverfolgung war eine Option für TypingLabel und Code, die sie seit 0,7.0 verwendet. Dies wurde in 0,7.4 erweitert, damit der Text in einem TypingLabel mit label.setSelectable(true) ausgewählt werden kann. Sie können auf den aktuell ausgewählten Text mit label.getSelectedText() zugreifen oder ihn direkt mit label.copySelectedText() kopieren. Wenn der Benutzer eine Klick- und Ziehensgeste über das Typinglabel (und es ist ausgewählt) abschließt, wird auch ein Ereignis ausgelöst. Sie können in einem TypingListener für "*SELECTED" anhören und Text kopieren, sobald er ausgewählt ist, oder nur kopieren, wenn eine Taste gedrückt wird. Weitere nützliche Funktionen, die die Eingabeverfolgung verwenden, umfassen das {LINK} -Tag, der einen Textspanne zu einem anklickbaren Link zu einer Internetadresse, {TRIGGER} , ein Ereignis auf Klick auslöst, und einige andere Tags, die auf Maus-Schwebe reagieren ( {ATTENTION} , {HIGHLIGHT} und {STYLIST} ). Diese funktionieren TypingLabel skipToTheEnd() TypingLabel , nicht {RAINBOW} TextraLabel .
Sie können in einer normalen Szene2d.UI -Skin -JSON -Datei mit einer Variante in der Skin von Libgdx, FWSkin (oder einer der Klassen, die es erweitern), lesen und dies wird normale Szene2d.UI -Stile und spezialisierte Textratypstile geladen. Die spezialisierten Stile unterscheiden sich in der Regel nur dann, als sie Font anstelle von BitmapFont verwenden und alle in der Styles -Klasse hier verschachtelt sind. Einen speziellen Stil zu haben bedeutet, dass eine Schriftart an mehr Stellen wiederverwendet werden kann, ohne viele Kopien einer Bitmapfont (manchmal pro Widget) erstellen zu müssen, was vor Textratypist 1.0.0 der Fall war. Normalerweise ist es unkompliziert, von Haut zu FWSKin zu wechseln. CODEO CODE VOR:
Skin skin = new Skin ( Gdx . files . internal ( "my-skin.json" ));Würde sich danach in das ändern:
FWSkin skin = new FWSkin ( Gdx . files . internal ( "my-skin.json" )); Sie können einer Skin auch eine FWSkin zuweisen, und dies ist die kompatibelste Option, da Ihre Hautvariable nur eine normale Skin ist. Es gibt jedoch einige Komfortmethoden in FWSkin , um Entfernungsfeldschriften etwas leichter zu handhaben. Wenn Sie FWSkin nach Möglichkeit verwenden, ist dies eine gute Idee.
Warum heißt es FWSkin , wundere Sie sich? Nun, es kann sowohl Schrift- als auch Bitmapfont -Instanzen aus .fnt -Dateien (nur für BitmapFont benötigen) geladen und können für strukturierte JSON -Schriftarten dieselbe tun, die hier normalerweise von Fontwriter oder FW erstellt werden. Der ursprüngliche Zweck von FWSkin bestand nur darin, von .Fnt und .Json/.Dat -Schriftdateien gleich gut zu laden, aber sein Umfang erweiterte um die neuen Stile.
Wenn Sie Stripe verwendet haben, gibt es einen Drop-In-Ersatz, der sowohl das macht, was FWSkin macht als auch das Freetype-Handling, das Stripe tut. Dies ist die zusätzliche FreeTypist -Abhängigkeit, die in einem separaten Repository verfügbar ist. Es ermöglicht das Konfigurieren von Freetype, indem Sie in Ihrem Skin JSON, das häufig vom Hautkomponisten hergestellt wird, ein "com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator" in Ihrem Skin JSON enthält. Sie können normale Skins von Hautkomponisten einnehmen und mit Stripe kompatibel und mit Freetypisten verwenden.
Sie können es über Gradle erhalten, aber es ist wahrscheinlich eine bessere Option, nur in die beiden Dateien aus diesem Ordner in Freetypisten in Ihren eigenen Code zu kopieren. Unabhängig davon, wie Sie vom Freetypisten abhängen, benötigt es eine Abhängigkeit von Freetype (einschließlich geeigneter "Plattform" -Deichtern) und von Textratypist (derzeit 1.0.0). Wenn FWSKin und Textratypist im Allgemeinen Funktionen hinzugefügt werden, sollte auch Freetypist aktualisiert werden.
Sie möchten wahrscheinlich Textratypist mit Gradle bekommen! Die Abhängigkeit für das Kernmodul eines LIBGDX -Projekts sieht aus wie:
implementation " com.github.tommyettinger:textratypist:1.1.0 "Dies setzt voraus, dass Sie bereits von libgdx angewiesen sind. Textratypist ist auf Version 1.12.1 oder höher abhängig. Eine Anforderung für 1.11.0 wurde in Textratypist 0.5.0 hinzugefügt, da einige Änderungen des Tooltip -Codes in LIBGDX gebrochen wurden. Die Anforderung für 1.12.1 wurde in 1.0.0 hinzugefügt, da sich einige Dinge wahrscheinlich geändert haben, aber 1.12.1 (oder die nachfolgenden Snapshot -Veröffentlichungen) sollten ziemlich einfach zu aktualisieren sein.
Wenn Sie GWT verwenden, sollte dies kompatibel sein. Es benötigt diese Abhängigkeiten im HTML -Modul:
implementation " com.github.tommyettinger:textratypist:1.1.0:sources "
implementation " com.github.tommyettinger:regexodus:0.1.16:sources "GWT benötigt dies auch in der Datei gdxDefinition.gwt.xml (seit Version 0.7.7):
< inherits name = " regexodus.regexodus " />
< inherits name = " com.github.tommyettinger.textratypist " /> In Version 0.7.4 und früher würden Sie eine frühere Version beider Abhängigkeiten (Hinweis, dies ist eine alte Version ):
// OLD VERSION
implementation " com.github.tommyettinger:textratypist:0.7.4:sources "
implementation " com.github.tommyettinger:regexodus:0.1.13:sources " und würde diese GWT stattdessen verwenden:
<!-- OLD VERSION -->
< inherits name = " regexodus " />
< inherits name = " textratypist " />Regexodus ist die GWT-kompatible reguläre Expressionsbibliothek, mit der einige komplexe Muster intern entsprechen. Abgesehen von libgdx selbst ist Regexodus die einzige Abhängigkeit dieses Projekts. Die GWT erbt sich für Textratypist und Regexodus, da sich herausstellt, dass die Verwendung des Standardpakets echte Probleme verursachen kann.
Es gibt mindestens eine Veröffentlichung im Abschnitt Releases dieses Repo, aber Sie werden immer noch ermutigt, Gradle zu verwenden, um diese Bibliothek und ihre Abhängigkeiten zu bearbeiten.
Sie können auch Jitpack verwenden, um ein aktuelles Commit zu erhalten, was bei einer langen Spanne zwischen den Veröffentlichungen nützlich sein kann. Current gdx-liftoff and gdx-setup projects all can use JitPack dependencies without needing any extra configuration. You would use this dependency in your core module:
implementation ' com.github.tommyettinger:textratypist:de5a52f340 ' You can change de5a52f340 to any commit in the Commits tab of https://jitpack.io/#tommyettinger/textratypist , but you should not use -SNAPSHOT -- it can change without your requesting it to, which is not what you want!
You can also depend on FreeTypist using:
implementation " com.github.tommyettinger:freetypist:1.1.0 "(Now, FreeTypist 1.1.0 uses TextraTypist 1.1.0 .)
And if you target HTML and have FreeType working somehow, you would use this Gradle dependency:
implementation " com.github.tommyettinger:freetypist:1.1.0:sources "And this inherits line:
< inherits name = " com.github.tommyettinger.freetypist " />FreeType doesn't work out-of-the-box on GWT, though there is this].
Some parts of TextraTypist act differently from their counterparts in scene2d.ui and Rafa Skoberg's typing-label.
A big quirk is that Font and BitmapFont have some core disagreements about how to parse a .fnt file, and the results of creating a Font with new Font("MyFont.fnt") can be different from new Font(new BitmapFont(Gdx.files.internal("MyFont.fnt"))) . BitmapFont reads in padding information (and does so incorrectly according to the BMFont spec), where Font ignores padding information entirely. Some .fnt files have been made so they look right in libGDX by using padding, but they will look wrong in other frameworks/engines without that padding. Font compromises by allowing manual adjustment of x and y position for all glyphs (y often needs to be adjusted, either to a positive or negative value), as well as the width and height of glyphs (these are useful less frequently, but can be helpful to stretch or squash a font). It may take some tweaking to get a Font made from a BitmapFont to line up correctly with other widgets. You also may need to adjust the offsetX, offsetY, and maybe xAdvance parameters if you load an atlas (such as with addEmoji() or addGameIcons() ), and the adjustments may be quite different for a Font made from a BitmapFont vs. a Font made directly from a .fnt file. Since 0.8.1, Font can parse an extended version of the .fnt format that permits floats for any spatial metrics, and not just ints. No files actually use this here and now, because the Structured JSON files produced by fontwriter all use floats internally for everything.
If you load text from a file and display it, you can sometimes get different results from creating that text in code, or loading it on a different machine. This should only happen if the file actually is different -- that is, the files' line endings use rn when checked out with Git on a Windows machine, or n on MacOS or Linux machines. TextraTypist uses r to mark some kinds of "soft" line breaks that can be re-wrapped, and n for "hard" line breaks that must always create a new line. Having rn present generally shows up as two lines for every line break. A simple solution that works for many projects is to include a .gitattributes file in your project root, like the one here. This can be used to force all text files or all text files with a certain file extension to use LF mode, where only a single n is used for line breaks. It's still recommended to keep .bat files using CRLF mode, with rn used, for compatibility. Using .gitattributes from the start is a good idea, and should keep files exactly the same on all current OSes. Older Windows programs (like Notepad from Windows 7) aren't able to read n line endings, but the versions distributed with recent Windows can use n easily, as can almost all code-oriented text editors.
Colors can be written out as hex strings, like #FF7700 or #9783EDFF , given by name, or described using a simple syntax. The full list of (case-sensitive!) names can be seen ordered by hue, by lightness, or by name. You can take one or more of these color names, optionally add adjectives like "light" or "dull", and get a color that mixes the named colors and applies changes from the adjectives. There are some tricky things here:
Colors class, and are ALL_CAPS , sometimes with underscores. Other names are from colorful-gdx, and are lowercased single words. In a few cases, the same word refers to a different color value if you use ALL_CAPS or use lowercase ( ORANGE and orange are a good example).ColorUtils.unevenMix() . You can have a number after any color name, which assigns a weight to that color for the mixing. Higher numbers will cause their preceding color to have more effect on the result; any non-negative integers are allowed.0x00000100 ), or fully transparent very dark blue, which is used as a placeholder because visually it is the same as transparent black. If a color does wind up as 256 at the time it is finally rendered, it will probably be ignored.Palette with its static addColor() method. This makes another color name usable, but won't retroactively make that color name parse correctly. You may have to call methods like Font.markup() again, so it's best if you can change colors before using them.If you encounter issues with TypingLabel tokens, and you use ProGuard, the configuration for that tool needs a small addition:
-keep class com.github.tommyettinger.textra.** { *; }
There may be more strict versions of this ProGuard instruction possible, but at the very least, the com.github.tommyettinger.textra.effects package needs to be kept as-is, for reflection reasons. You may also need to ensure the com.github.tommyettinger.textra.Effect class is kept. Keeping all of TextraTypist should be perfectly fine for obfuscation purposes because this is an open-source library, but it does add a small amount to the size of the final JAR or APK. Right now, that appears to be 202 KB if you don't include any assets, so I wouldn't worry about it.
Distance field fonts might not be worth the hassle of resizing each font's distance field, but they do look much better at very large sizes than standard fonts. Using a standard font actually can look better for small-to-moderate size adjustments. The best approach when you don't need large text seems to be to use a large standard font texture, without SDF or MSDF, and scale it down as needed. Since 1.0.0, all fonts support emoji. Older versions did not support emoji in MSDF fonts.
If you happen to use both tommyettinger's TextraTypist library and tommyettinger's colorful-gdx library, you may encounter various issues. ColorfulBatch appeared to be incompatible because it uses an extra attribute per-vertex (compared to SpriteBatch), but an adjustment it already does seems to make it compatible without changes. Color description can be done by both colorful-gdx's SimplePalette and ColorUtils.describe() here, but descriptions would really need to use the RGBA color space to work as expected. Alternative shaders from colorful-gdx's Shaders class generally won't work correctly with the known fonts here and the defaults for neutral colors (here, white is the neutral color, but in most shaders that allow lightening, 50% gray is the neutral color). The easiest solution for all this is to use a normal, vanilla SpriteBatch for TextraTypist rendering, and whatever ShaderProgram or ColorfulBatch you want for colorful-gdx rendering.
Games that use custom Batch classes with additional attributes don't work out-of-the-box with Font , but it provides an extension point to allow subclasses to function with whatever attributes the Batch needs. Overriding Font.drawVertices() allows quite a lot of flexibility to handle unusual batches, and you can generally leave the custom Font unchanged other than the drawVertices() override. If you implement Font 's copy constructor just by calling super(font); , and still allow it to take a Font argument, then you can quickly take Fonts from KnownFonts and make copies using your subclass. The JavaDocs for Font.drawVertices() detail what each of the 20 floats passed in via an array to drawVertices are expected to do; custom Batches could have 24 or more floats and so would need to put the 20 existing floats in the positions their Batch expects.
Sometimes, you may need to enable or disable integer positioning for certain fonts to avoid a strange GPU-related visual artifact that seems to only happen on some Nvidia GPUs. When this happens, glyphs may appear a half-pixel or so away from where they should be, in seemingly randomly-picked directions. It looks awful, and the integer position code at least should resolve it most of the time. Integer positions don't work well if you use world units that span multiple pixels in length, but this bug is an absolute mystery, and also doesn't happen at all on integrated GPUs, and may not happen on AMD GPUs. How it behaves on Apple Silicon graphics, I also do not know. The Issues tab is always available for anyone who wants to try to debug this! It is possible that some fixes introduced in the 0.7.x releases may have already eliminated this bug, but I'm not especially optimistic that it is always gone.
The gdx-freetype extension produces BitmapFont outputs, and you can create a Font from a BitmapFont without any issues. However, FreeType's "Auto" hinting settings both look worse than they normally should with Font, and can trigger the GPU artifact covered immediately above. Instead of "AutoSlight", "AutoMedium", or "AutoFull" hinting, you can choose "Slight", "Medium", or "Full", which makes the font look more legible and avoids the GPU half-pixel-offset issue. I don't have any idea why this happens, but because hinting can be set either in the FreeType generator parameters or (if you use Stripe or FreeTypist from this repo) set in a Skin file with "hinting": "Full" , it isn't hard to fix.
There are some known issues with scaling, rotation, and integer-positioning in 0.7.5 through 0.9.0. You may see labels slide a little relatively to their backgrounds when rotated smoothly, and some (typically very small) fonts may need integer positions enabled to keep a stable baseline. Font debug lines may be quite incorrect in some of these versions, also, even if the text displays correctly to users. Scaling has improved significantly in 0.7.8, as has the handling of debug lines, but rotation still has some subtle bugs. A bug was fixed starting in 0.8.0 that made extra images in a Font (such as emoji) scale differently and drift when the Font they were mixed with scaled. That same bug also made an ordinary Font drift slightly as its scale changed; this is also fixed. Positions and sizes for background color and for images from an atlas have improved in 0.8.2, so selecting text shouldn't cover up text as badly with the background, and emoji should be fully surrounded by their selection background. Positions along the line vertically, while the text is scaled, improved in 0.8.3 so that the scaling is relative to the center of the line, rather than the bottom of the line. Some other code already expected scaling to be centered like that, so this change makes scaling look better, usually. In 0.9.0, integer positioning can still be set, but it does nothing; in practice, setting it was causing more problems than improvements. The few fonts that one would think would need integer positions (pixel fonts) actually look better without it. There are still some rotation issues in 0.9.0, though they mostly happen when the descent is configured to an extreme value, or sometimes other metrics. Lining up underline/strikethrough with rotated text is also a challenge.
Word wrap periodically seems to break and need fixing across different releases. The most recent time this happened was in 0.7.9, which also affected 0.8.0 and was fixed (I hope) in 0.8.1. A different wrapping-related bug was fixed more recently, in 0.8.3 ; this was rare, and only affected TypingLabel when some effects were present.
There's other issues with word wrap if you expect it to behave exactly like Label in libGDX. Here, we don't break words, even if a single word is longer than the width of a TextraLabel or TypingLabel . The reason for this is twofold: first, breaking words without proper hyphenation logic can change the meaning of those words, and second, fixing this could be a ton of work. I do intend to try to make this configurable and match Label by default in some near-future version. The word wrap behavior for multiple whitespace characters changed in version 0.10.0, and should be essentially correct now. Remember that word wrap only makes sense in the context of scene2d.ui for a widget (such as a TypingLabel or TextraLabel) if that widget has been sized by scene2d.ui, usually by being in a Table cell, or sometimes by being in a Container. You may need to add a label to a Table or Container, then set the width and/or height of that Cell or Container, to get wrap to act correctly.
A possibly-frequent issue (with an easy fix) that may start occurring with version 0.9.0 and later is that TextraTypist now requires Java 8 or higher. All modern desktop OSes support Java 8, and this has been true for 9 years. Android has supported Java 8 (language level, though only some APIs) for several years, and older versions can use "desugaring" to translate more-recent Java code to be compatible with (much) older Android versions. GWT has supported language level 8 for years, as well; 2.8.2, which libGDX is built with, allows using Java 8 features, and 2.11.0, which an alternate libGDX backend supports, allows using even more. RoboVM doesn't support any new APIs added in Java 8, but it has supported language level 8 from the start. TextraTypist doesn't use any APIs from Java 8, but does now use functional interfaces and method references. Having these features allows us to remove some nasty reflection-based code, and that in turn helps usage on platforms where reflection is limited, such as GWT and Graal Native Image. GWT was able to work before, but Graal Native Image would have needed a lot of configuration to be added for every game/app that used TextraTypist. The other issue is that if TextraTypist continued to target Java 7 for its library code, it wouldn't compile with Java 20 or later, and the LTS release 21 has been out for almost a year.
If you're upgrading to TextraTypist 1.0.0 or later, and you haven't changed Skin usage at all, you'll probably encounter some bugs. These are quick to fix by changing Skin to FWSkin , or if you used Stripe, FreeTypistSkin from FreeTypist. There is also a FWSkinLoader for use with AssetManager , and FreeTypist has a FreeTypistSkinLoader . FWSkin allows loading the new types of scene2d.ui styles that reuse Font instances rather than making new ones often. It also allows loading BitmapFont and Font objects from .fnt, .json, and .dat files (where .dat is the compressed JSON format this repo uses), requiring only configuration for BitmapFont in the skin .json .
If you want to make your own Fonts, you can use Hiero or AngelCode BMFont as you always have been able to, but now you can also use FontWriter (though it is Windows-only for now). FontWriter can output SDF and MSDF distance field fonts, as well as standard bitmap fonts, and it always ensures the files have been processed how TextraTypist prefers them (they need a small white square in the lower right to use for block drawing and underline/strikethrough, plus a specific transparency change makes certain overlapping renders with alpha keep their intended colors). These processing changes could be done by running BlockStamper and TransparencyProcessor in the TextraTypist tests, but that's a hassle, so using FontWriter is preferred. It outputs .json and .dat font files, as well as a .png texture. You only need the .png file AND (the .dat file OR the .json file), but the .dat file is smaller, so it is usually preferred. The .json file can be hand-edited, but it isn't very easy to do that given how it is inside.
This is based very closely on typing-label, by Rafa Skoberg. Typing-label is MIT-licensed according to its repo LICENSE file, but (almost certainly unintentionally) does not include any license headers in any files. Since the only requirement of the MIT license is to leave any license text as-is, this Apache-licensed project is fully compliant with MIT. The full MIT license text is in the file typing-label.LICENSE , and the Apache 2 license for this project is in the file LICENSE . Apache license headers are also present in all library source files here. The Apache license does not typically apply to non-code resources in the src/test/resources folder; individual fonts have their own licenses stored in that directory.
Twemoji isn't a font, so it might be best to mention it separately. It's licensed under CC-BY 4.0, and requires attribution to Twitter if used. Twemoji's guidelines for attribution are here. (The documentation still says Twitter, not X, and to my knowledge X doesn't employ any of the active Twemoji team, so... I would link back to the Twemoji repo, so that it is up to them).
Like Twemoji, Game-Icons.png isn't a font, and it has quite a few contributors to the project. Because all icons in the project are on one PNG file, you must credit all the contributors who licensed their art under CC-BY, and it may be ideal just to credit all the contributors, period. The list is in the license.
OpenMoji is also not a font, but it clearly has a CC-BY-SA 4.0 license, and the BY clause should be satisfied by attributing the OpenMoji Project. The SA clause should be satisfied by any users of OpenMoji continuing to provide attribution. There isn't a non-commercial clause for any assets here.
The logo was made by Raymond "raeleus" Buckley and contributed to this project. It can be used freely for any purpose, but I request that it only be used to refer to this project unless substantially modified.
Wow, raeleus has really helped a tremendous amount. Both by testing TextraTypist in his Skin Composer app (which found quite a lot of bugs, small and large), and advising on proper scene2d.ui layout practices (which were not easy to get 100% right), the large 0.5.2 release (and those after it) would not be what it is today without his input. Danke schön!
Thanks to fraudo for helping me go step-by-step to figure out how badly I had screwed up rotation with backgrounds, and for writing most of LabelRotationTest . Release 0.5.5 would still probably be in development for months without that help, so thanks are in order.
Thanks to piotr-j (evilentity), mas omenos, and DMC from the libGDX Discord, for really thoroughly testing TextraTypist. IncongruityTest was originally piotr-j's work, and it helped me figure out which fonts in KnownFonts had incorrect bounds information. TableWrapTest was based closely on mas omenos' work, and was useful to locate a wrapping bug. DMC managed to track down a very elusive ProGuard issue, which is now documented in this README.md , as well as noticing and helping debug a variety of issues with code that I had no idea people were already using. Sanda Moen, fourlastor, tecksup, and Siavash Ranbar helped track down some maddening bugs affecting word wrap; thanks to everyone who's put up with those kinds of bug! IgorApplications has helped track down various SDF-related bugs and pointed out that a feature (full-color emoji in SDF fonts) was possible, so thanks as well!
Of course, I have to thank Rafa Skoberg for writing quite a lot of the code here! About 2/3 of the effects are almost purely by Rafa, much of the TypingLabel-related code is nearly unchanged from his work, and in general he showed what libGDX UIs could be just by making the initial code.
Thanks to all the font designers who made fonts we use here; by making your fonts freely available, you perform a great service to the people who depend on them.
Thanks to Twitter for generously contributing Twemoji to the world of open source; having broadly available emoji makes them much more usable. Note that because this was a generous action by Twitter, it happened before its acquisition/change to "X".
Thanks to the many contributors to game-icons.net for producing high-quality free icons to game developers everywhere. The icons in Game-Icons.png were made by:
(Projects that use TextraTypist can copy the above list of Game-Icons.png contributors to comply with its license.)
Thanks again to the OpenMoji project! That was clearly a lot of work. OpenMoji is licensed as CC BY-SA 4.0.
Thanks also to the developers of the Noto Fonts and Emoji! They are OFL 1.1 licensed. The Noto Color Emoji here also used data from the MIT-licensed EmojiBase project to create the atlas.