Fuentes de Google en BASIC

Nombra una familia tipográfica y obtén texto vectorial real en lugar de una hoja de bitmap, con la espera que exige la carga asíncrona y lo que pasa una vez exportado el juego.

Para qué sirve esto#

El BASIC clásico dibuja texto a partir de una imagen de fuente: una hoja de glifos que fijas con TextFontImage(text, image). Funciona, es lo que el dialecto siempre ha hecho, y se queda exactamente donde está. Pero una hoja de bitmap no escala, y se ve como lo que es.

LoadGoogleFont nombra una familia en su lugar:

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

No se elimina nada. LoadFont, TextFontImage y la ruta de bitmap siguen funcionando, y un programa puede mezclarlos.

La espera no es opcional#

Una fuente es un archivo, y el archivo llega después de que la llamada retorna. Imprime antes de que llegue y los primeros fotogramas salen en la fuente de reserva, lo que se lee como "el comando no hizo nada".

GoogleFontReady es lo que esperas:

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

Advertencia: la misma trampa atrapó una vez a los propios módulos de la aplicación. Declarar una fuente no es cargarla: un canvas solo descarga una familia cuando algo la pide, y la respuesta llega uno o varios fotogramas después.

Explorar las familias#

El motor trae una lista de familias, y un programa puede leerla, que es lo que necesita un selector de fuentes dentro de un juego:

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

La lista alimenta un selector; no es un límite. Cualquier familia de Google se carga por nombre a través de LoadGoogleFont, esté listada o no.

Qué pasa al exportar#

Dónde corre el juegoQué pasa
El editorLa familia se descarga de Google la primera vez que se nombra.
Exportación a navegadorLo mismo, y el archivo se sirve desde la build cuando el exportador pudo empaquetarlo.
Build nativa o BevyEl archivo tiene que haber viajado con la build. No hay red.

El exportador lee tu programa, encuentra cada familia que nombraste en texto plano, la descarga y la escribe en assets/fonts/<Family>.woff2. Esa build entonces funciona sin conexión.

Advertencia: una familia calculada en tiempo de ejecución no se puede encontrar leyendo el programa, así que no se puede empaquetar. El informe de exportación lo dice, y la build recurre a la fuente por defecto. Escribe LoadGoogleFont("Inter"), no LoadGoogleFont(names[i]), para cualquier cosa que deba sobrevivir a una exportación.

Los comandos#

ComandoQué hace
LoadGoogleFont(family)Carga la familia, devuelve un id
LoadGoogleFont(fontID, family)Lo mismo, con un id que eliges tú
GoogleFontReady(fontID)1 en cuanto el archivo es utilizable
GoogleFontCount()Cuántas familias ofrece la lista
GoogleFontName(index)Un nombre de familia de la lista

Todo lo demás es la maquinaria de fuentes existente: PrintFont(id) para Print, TextFontSet(text, id) para un objeto de texto, DeleteFont(id) para descartarla.

Para ir más allá#