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 gra | Co się dzieje |
|---|---|
| Edytor | Rodzina jest pobierana od Google przy pierwszym wywołaniu jej nazwy. |
| Eksport do przeglądarki | To samo, a plik jest serwowany z builda, jeśli eksporter zdołał go w niego dołączyć. |
| Build natywny lub Bevy | Plik 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 nieLoadGoogleFont(names[i]).
Polecenia#
| Polecenie | Co 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#
- Cała rodzina poleceń, z każdym parametrem: polecenia Font.
- Sam dialekt: Język BASIC.