Czcionki Google w BASIC

Podaj nazwę rodziny czcionek i dostań prawdziwy tekst wektorowy zamiast arkusza bitmapowego, z czekaniem, którego wymaga asynchroniczne wczytywanie, oraz z tym, co się dzieje po wyeksportowaniu gry.

Do czego to służy#

Klasyczny BASIC rysuje tekst z obrazu czcionki: arkusza glifów, który ustawiasz poleceniem TextFontImage(text, image). To działa, dialekt zawsze tak robił, i zostaje to dokładnie tam, gdzie jest. Ale bitmapowy arkusz się nie skaluje i wygląda dokładnie tak, jak na to wygląda.

LoadGoogleFont w zamian przyjmuje nazwę rodziny:

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

Nic nie zostaje usunięte. LoadFont, TextFontImage i ścieżka bitmapowa nadal działają, a program może je mieszać.

Czekanie nie jest opcjonalne#

Czcionka to plik, a plik dociera już po tym, jak wywołanie zwróci wynik. Jeśli wypiszesz tekst, zanim plik dotrze, pierwsze klatki wyjdą w czcionce zapasowej, co odczytuje się jako "polecenie nic nie zrobiło".

Na GoogleFontReady właśnie czekasz:

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

Uwaga: ta sama pułapka złapała kiedyś same moduły aplikacji. Zadeklarowanie czcionki to nie to samo, co jej wczytanie: canvas pobiera rodzinę dopiero wtedy, gdy ktoś jej zażąda, a odpowiedź dociera klatkę lub kilka klatek później.

Przeglądanie rodzin#

Silnik dostarcza listę rodzin, a program może ją odczytać, czego właśnie potrzebuje selektor czcionek wewnątrz gry:

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

Ta lista zasila selektor; nie jest ograniczeniem. Dowolna rodzina Google wczytuje się po nazwie przez LoadGoogleFont, niezależnie od tego, czy jest na liście.

Co się dzieje przy eksporcie#

Gdzie działa graCo się dzieje
EdytorRodzina jest pobierana od Google przy pierwszym wywołaniu jej nazwy.
Eksport do przeglądarkiTo samo, a plik jest serwowany z builda, jeśli eksporter zdołał go w niego dołączyć.
Build natywny lub BevyPlik musiał zostać dołączony do builda już wcześniej. Nie ma tam sieci.

Eksporter czyta twój program, znajduje każdą rodzinę, którą nazwałeś wprost, jako zwykły tekst, pobiera ją i zapisuje do assets/fonts/<Family>.woff2. Taki build działa potem offline.

Uwaga: rodziny obliczonej w czasie działania programu nie da się znaleźć, czytając kod, więc nie może zostać dołączona. Raport eksportu mówi to wprost, a build przechodzi na domyślną czcionkę. Dla wszystkiego, co ma przetrwać eksport, pisz LoadGoogleFont("Inter"), a nie LoadGoogleFont(names[i]).

Polecenia#

PolecenieCo robi
LoadGoogleFont(family)Wczytuje rodzinę, zwraca jej id
LoadGoogleFont(fontID, family)To samo, z id, które wybierasz sam
GoogleFontReady(fontID)1, gdy plik jest już gotowy do użycia
GoogleFontCount()Ile rodzin oferuje lista
GoogleFontName(index)Jedna nazwa rodziny z listy

Cała reszta to istniejący mechanizm czcionek: PrintFont(id) dla Print, TextFontSet(text, id) dla obiektu Text, DeleteFont(id), żeby go usunąć.

Idź dalej#