Google Fonts no BASIC
Nomeie uma família de fontes e receba texto vetorial de verdade em vez de uma folha bitmap, com a espera que o carregamento assíncrono exige e o que acontece assim que o jogo é exportado.
Para que serve isso#
O BASIC clássico desenha texto a partir de uma imagem de fonte: uma
folha de glifos que você define com TextFontImage(text, image). Funciona, é
o que o dialeto sempre fez, e continua exatamente onde está. Mas uma folha
bitmap não escala, e parece o que é.
LoadGoogleFont nomeia uma família em vez disso:
font = LoadGoogleFont("Inter")
PrintFont(font)
Print("Hello")
DO
Sync()
LOOP
Nada é removido. LoadFont, TextFontImage e o caminho bitmap continuam
funcionando, e um programa pode misturar os dois.
A espera não é opcional#
Uma fonte é um arquivo, e o arquivo chega depois que a chamada retorna. Imprimir antes de ele chegar faz os primeiros quadros saírem na fonte de fallback, o que se lê como "o comando não fez nada".
GoogleFontReady é o que você espera:
font = LoadGoogleFont("Inter")
ready = 0
DO
IF ready = 0
IF GoogleFontReady(font) = 1
PrintFont(font)
ready = 1
ENDIF
ENDIF
Print("Hello")
Sync()
LOOP
Aviso: a mesma armadilha já pegou os próprios módulos do aplicativo uma vez. Declarar uma fonte não é carregá-la: um canvas só baixa uma família quando algo a pede, e a resposta chega um quadro ou vários depois.
Navegando pelas famílias#
O motor traz uma lista de famílias, e um programa pode lê-la, o que é o que um seletor de fonte dentro de um jogo precisa:
count = GoogleFontCount()
FOR i = 0 TO count - 1
Print(GoogleFontName(i))
NEXT i
A lista alimenta um seletor; ela não é um limite. Qualquer família do Google
carrega pelo nome através de LoadGoogleFont, listada ou não.
O que acontece quando você exporta#
| Onde o jogo roda | O que acontece |
|---|---|
| O editor | A família é buscada do Google na primeira vez que é nomeada. |
| Exportação para navegador | O mesmo, e o arquivo é servido a partir do build quando o exportador conseguiu empacotá-lo. |
| Build nativo ou Bevy | O arquivo precisa ter viajado junto com o build. Não há rede. |
O exportador lê o seu programa, encontra toda família que você nomeou em
texto puro, baixa e a grava em assets/fonts/<Family>.woff2. Esse build
então funciona offline.
Aviso: uma família calculada em tempo de execução não pode ser encontrada lendo o programa, então não pode ser empacotada. O relatório de exportação avisa isso, e o build recorre à fonte padrão. Escreva
LoadGoogleFont("Inter"), nãoLoadGoogleFont(names[i]), para qualquer coisa que precise sobreviver a uma exportação.
Os comandos#
| Comando | O que faz |
|---|---|
LoadGoogleFont(family) | Carrega a família, devolve um id |
LoadGoogleFont(fontID, family) | O mesmo, com um id que você escolhe |
GoogleFontReady(fontID) | 1 assim que o arquivo está utilizável |
GoogleFontCount() | Quantas famílias a lista oferece |
GoogleFontName(index) | Um nome de família da lista |
Todo o resto é o mecanismo de fonte já existente: PrintFont(id) para
Print, TextFontSet(text, id) para um objeto Text, DeleteFont(id) para
descartá-la.
Indo além#
- A família inteira, com cada parâmetro: os comandos de Font.
- O dialeto em si: a linguagem BASIC.