Google-lettertypen in BASIC

Noem een lettertypefamilie en krijg echte vectortekst in plaats van een bitmapblad, met de wachttijd die asynchroon laden vereist en wat er gebeurt zodra de game is geëxporteerd.

Waar dit voor dient#

Klassiek BASIC tekent tekst vanaf een lettertypeafbeelding: een blad met glyphs dat u instelt met TextFontImage(text, image). Het werkt, het is wat het dialect altijd al deed, en het blijft precies waar het is. Maar een bitmapblad schaalt niet, en het ziet eruit zoals het is.

LoadGoogleFont noemt in plaats daarvan een familie:

font = LoadGoogleFont("Inter")
PrintFont(font)
Print("Hello")
DO
  Sync()
LOOP

Er wordt niets verwijderd. LoadFont, TextFontImage en het bitmappad blijven allemaal werken, en een programma kan ze mengen.

De wachttijd is niet optioneel#

Een lettertype is een bestand, en het bestand komt binnen nadat de aanroep terugkeert. Print voordat het is aangekomen, en de eerste frames komen eruit in het terugvallettertype, wat aanvoelt als "het commando deed niets".

GoogleFontReady is waar u op wacht:

font = LoadGoogleFont("Inter")
ready = 0
DO
  IF ready = 0
    IF GoogleFontReady(font) = 1
      PrintFont(font)
      ready = 1
    ENDIF
  ENDIF
  Print("Hello")
  Sync()
LOOP

Waarschuwing: dezelfde valkuil ving ooit de eigen modules van de app. Een lettertype declareren is het niet laden: een canvas downloadt een familie pas zodra iets erom vraagt, en het antwoord komt een frame of enkele frames later.

De families doorbladeren#

De engine levert een lijst met families, en een programma kan die lezen, wat precies is wat een lettertypekiezer in een game nodig heeft:

count = GoogleFontCount()
FOR i = 0 TO count - 1
  Print(GoogleFontName(i))
NEXT i

De lijst vult een kiezer; ze is geen beperking. Elke Google-familie laadt op naam via LoadGoogleFont, of ze nu op de lijst staat of niet.

Wat er gebeurt bij het exporteren#

Waar de game draaitWat er gebeurt
De editorDe familie wordt de eerste keer dat ze wordt genoemd, van Google opgehaald.
BrowserexportHetzelfde, en het bestand wordt vanuit de build geserveerd wanneer de exporteur het kon meebundelen.
Native- of Bevy-buildHet bestand moet met de build zijn meegereisd. Er is geen netwerk.

De exporteur leest uw programma, vindt elke familie die u in platte tekst hebt genoemd, downloadt haar en schrijft haar naar assets/fonts/<Family>.woff2. Die build werkt vervolgens offline.

Waarschuwing: een familie die tijdens het draaien wordt berekend, kan niet worden gevonden door het programma te lezen, en kan dus niet worden meegebundeld. Het exportrapport meldt dit, en de build valt terug op het standaardlettertype. Schrijf LoadGoogleFont("Inter"), niet LoadGoogleFont(names[i]), voor alles wat een export moet overleven.

De commando's#

CommandoWat het doet
LoadGoogleFont(family)Laadt de familie, geeft een id terug
LoadGoogleFont(fontID, family)Hetzelfde, met een id die u zelf kiest
GoogleFontReady(fontID)1 zodra het bestand bruikbaar is
GoogleFontCount()Hoeveel families de lijst biedt
GoogleFontName(index)Eén familienaam uit de lijst

Al de rest is de bestaande lettertypemachinerie: PrintFont(id) voor Print, TextFontSet(text, id) voor een Text-object, DeleteFont(id) om het te verwijderen.

Verder gaan#