I font di Google in BASIC

Nomina una famiglia di font e ottieni testo vettoriale vero invece di un foglio bitmap, con l'attesa che il caricamento asincrono richiede e cosa succede una volta esportato il gioco.

A cosa serve#

Il BASIC classico disegna il testo da un'immagine font: un foglio di glifi che imposti con TextFontImage(text, image). Funziona, è ciò che il dialetto ha sempre fatto, e resta esattamente dove si trova. Ma un foglio bitmap non scala, e si vede che lo è.

LoadGoogleFont nomina invece una famiglia:

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

Nulla viene rimosso. LoadFont, TextFontImage e il percorso bitmap continuano tutti a funzionare, e un programma può mescolarli.

L'attesa non è facoltativa#

Un font è un file, e il file arriva dopo che la chiamata ritorna. Stampa prima che arrivi e i primi fotogrammi escono nel font di ripiego, il che si legge come "il comando non ha fatto nulla".

GoogleFontReady è ciò su cui aspetti:

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

Attenzione: la stessa trappola ha colto una volta i moduli dell'app stessa. Dichiarare un font non significa caricarlo: una tela scarica una famiglia solo quando qualcosa la richiede, e la risposta arriva un fotogramma o diversi dopo.

Sfogliare le famiglie#

Il motore fornisce un elenco di famiglie, e un programma può leggerlo, il che è ciò di cui ha bisogno un selettore di font dentro un gioco:

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

L'elenco popola un selettore; non è un limite. Qualsiasi famiglia di Google si carica per nome tramite LoadGoogleFont, elencata o no.

Cosa succede quando esporti#

Dove gira il giocoCosa succede
L'editorLa famiglia viene scaricata da Google la prima volta che viene nominata.
Esportazione browserUguale, e il file viene servito dalla build quando l'esportatore ha potuto incorporarlo.
Build nativa o BevyIl file deve aver viaggiato con la build. Non c'è rete.

L'esportatore legge il tuo programma, trova ogni famiglia che hai nominato in testo semplice, la scarica e la scrive in assets/fonts/<Family>.woff2. Quella build funziona quindi offline.

Attenzione: una famiglia calcolata a runtime non può essere trovata leggendo il programma, quindi non può essere inclusa. Il rapporto di esportazione lo segnala, e la build torna al font predefinito. Scrivi LoadGoogleFont("Inter"), non LoadGoogleFont(names[i]), per qualsiasi cosa debba sopravvivere a un'esportazione.

I comandi#

ComandoCosa fa
LoadGoogleFont(family)Carica la famiglia, restituisce un id
LoadGoogleFont(fontID, family)Uguale, con un id scelto da te
GoogleFontReady(fontID)1 quando il file è utilizzabile
GoogleFontCount()Quante famiglie offre l'elenco
GoogleFontName(index)Un nome di famiglia dall'elenco

Tutto il resto è la solita meccanica dei font: PrintFont(id) per Print, TextFontSet(text, id) per un oggetto Text, DeleteFont(id) per eliminarlo.

Per approfondire#