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 juego | Qué pasa |
|---|---|
| El editor | La familia se descarga de Google la primera vez que se nombra. |
| Exportación a navegador | Lo mismo, y el archivo se sirve desde la build cuando el exportador pudo empaquetarlo. |
| Build nativa o Bevy | El 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"), noLoadGoogleFont(names[i]), para cualquier cosa que deba sobrevivir a una exportación.
Los comandos#
| Comando | Qué 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á#
- La familia completa, con cada parámetro: los comandos de Font.
- El dialecto en sí: el lenguaje BASIC.