Google Fonts in BASIC
Nennen Sie eine Schriftfamilie und bekommen Sie echten Vektortext statt eines Bitmap-Sheets, mit der Wartezeit, die asynchrones Laden erfordert, und dem, was beim Export des Spiels passiert.
Wofür das gut ist#
Klassisches BASIC zeichnet Text aus einem Font-Image: einem
Zeichensatz-Sheet, das Sie mit TextFontImage(text, image) setzen. Es
funktioniert, es ist das, was der Dialekt schon immer getan hat, und es
bleibt genau, wo es ist. Aber ein Bitmap-Sheet skaliert nicht, und es sieht
aus wie das, was es ist.
LoadGoogleFont benennt stattdessen eine Familie:
font = LoadGoogleFont("Inter")
PrintFont(font)
Print("Hello")
DO
Sync()
LOOP
Nichts wird entfernt. LoadFont, TextFontImage und der Bitmap-Pfad
funktionieren alle weiter, und ein Programm kann sie mischen.
Das Warten ist nicht optional#
Eine Schrift ist eine Datei, und die Datei kommt an, nachdem der Aufruf zurückgekehrt ist. Zeichnen Sie, bevor sie ankommt, und die ersten Frames erscheinen in der Fallback-Schrift, was sich liest wie „der Befehl hat nichts getan".
Auf GoogleFontReady warten Sie:
font = LoadGoogleFont("Inter")
ready = 0
DO
IF ready = 0
IF GoogleFontReady(font) = 1
PrintFont(font)
ready = 1
ENDIF
ENDIF
Print("Hello")
Sync()
LOOP
Warnung: Dieselbe Falle hat einst die eigenen Module der App erwischt. Eine Schrift zu deklarieren heißt nicht, sie zu laden: Ein Canvas lädt eine Familie erst herunter, wenn etwas danach fragt, und die Antwort kommt einen oder mehrere Frames später an.
Die Familien durchstöbern#
Die Engine liefert eine Liste von Familien mit, und ein Programm kann sie lesen, das ist es, was ein Font-Picker in einem Spiel braucht:
count = GoogleFontCount()
FOR i = 0 TO count - 1
Print(GoogleFontName(i))
NEXT i
Die Liste befüllt einen Picker; sie ist keine Begrenzung. Jede
Google-Familie lädt per Namen über LoadGoogleFont, gelistet oder nicht.
Was beim Export passiert#
| Wo das Spiel läuft | Was passiert |
|---|---|
| Der Editor | Die Familie wird beim ersten Nennen von Google geholt. |
| Browser-Export | Genauso, und die Datei wird aus dem Build ausgeliefert, wenn der Exporter sie bündeln konnte. |
| Native- oder Bevy-Build | Die Datei muss mit dem Build gereist sein. Es gibt kein Netzwerk. |
Der Exporter liest Ihr Programm, findet jede Familie, die Sie im Klartext
genannt haben, lädt sie herunter und schreibt sie nach
assets/fonts/<Family>.woff2. Dieser Build funktioniert dann offline.
Warnung: Eine Familie, die zur Laufzeit berechnet wird, kann durch Lesen des Programms nicht gefunden werden, sie kann also nicht gebündelt werden. Der Exportbericht sagt das, und der Build fällt auf die Standardschrift zurück. Schreiben Sie
LoadGoogleFont("Inter"), nichtLoadGoogleFont(names[i]), für alles, was einen Export überleben muss.
Die Befehle#
| Befehl | Was er tut |
|---|---|
LoadGoogleFont(family) | Lädt die Familie, gibt eine id zurück |
LoadGoogleFont(fontID, family) | Dasselbe, mit einer id Ihrer Wahl |
GoogleFontReady(fontID) | 1, sobald die Datei nutzbar ist |
GoogleFontCount() | Wie viele Familien die Liste anbietet |
GoogleFontName(index) | Ein Familienname aus der Liste |
Alles andere ist die bestehende Font-Maschinerie: PrintFont(id) für
Print, TextFontSet(text, id) für ein Text-Objekt, DeleteFont(id), um
sie zu verwerfen.
Weiterführend#
- Die ganze Familie, mit jedem Parameter: die Font-Befehle.
- Der Dialekt selbst: die BASIC-Sprache.