Шрифты Google в BASIC
Назовите семейство шрифтов и получите настоящий векторный текст вместо растрового листа, с ожиданием, которое требует асинхронная загрузка, и с тем, что происходит после экспорта игры.
Для чего это нужно#
Классический BASIC рисует текст из изображения шрифта: листа глифов,
который задаётся через TextFontImage(text, image). Это работает, это то,
что диалект всегда делал, и это остаётся в точности на своём месте. Но
растровый лист не масштабируется, и по нему это видно.
LoadGoogleFont вместо этого называет семейство:
font = LoadGoogleFont("Inter")
PrintFont(font)
Print("Hello")
DO
Sync()
LOOP
Ничего не удалено. LoadFont, TextFontImage и весь растровый путь
продолжают работать, и программа может смешивать оба подхода.
Ожидание не является опциональным#
Шрифт, это файл, и файл приходит уже после того, как вызов вернул управление. Выведите текст до того, как он появится, и первые кадры выйдут в запасном шрифте, что читается как «команда ничего не сделала».
GoogleFontReady, это то, чего нужно дождаться:
font = LoadGoogleFont("Inter")
ready = 0
DO
IF ready = 0
IF GoogleFontReady(font) = 1
PrintFont(font)
ready = 1
ENDIF
ENDIF
Print("Hello")
Sync()
LOOP
Предупреждение: та же ловушка однажды поймала собственные модули приложения. Объявить шрифт, это не то же самое, что его загрузить: canvas скачивает семейство только тогда, когда что-то его запрашивает, а ответ приходит кадром или несколькими позже.
Просмотр семейств#
Движок несёт список семейств, и программа может его прочитать, что нужно для собственного выбора шрифта внутри игры:
count = GoogleFontCount()
FOR i = 0 TO count - 1
Print(GoogleFontName(i))
NEXT i
Список наполняет выбор шрифта, но не является ограничением: любое семейство
Google загружается по имени через LoadGoogleFont, числится оно в списке или
нет.
Что происходит при экспорте#
| Где выполняется игра | Что происходит |
|---|---|
| Редактор | Семейство загружается с сервера Google при первом обращении по имени. |
| Экспорт в браузер | То же самое, а файл отдаётся из сборки, если экспортёр смог его встроить. |
| Native- или Bevy-сборка | Файл должен был отправиться вместе со сборкой. Сети нет. |
Экспортёр читает вашу программу, находит каждое семейство, названное в
открытом тексте, скачивает его и записывает в
assets/fonts/<Family>.woff2. Такая сборка затем работает офлайн.
Предупреждение: семейство, вычисленное во время выполнения, невозможно найти при чтении программы, поэтому его нельзя встроить в сборку. Отчёт об экспорте сообщает об этом, и сборка откатывается на шрифт по умолчанию. Пишите
LoadGoogleFont("Inter"), а неLoadGoogleFont(names[i]), для всего, что должно пережить экспорт.
Команды#
| Команда | Что она делает |
|---|---|
LoadGoogleFont(family) | Загружает семейство, возвращает id |
LoadGoogleFont(fontID, family) | То же самое, с id по вашему выбору |
GoogleFontReady(fontID) | Равна 1, когда файл готов к использованию |
GoogleFontCount() | Сколько семейств предлагает список |
GoogleFontName(index) | Одно имя семейства из списка |
Всё остальное, это уже существующая шрифтовая машинерия: PrintFont(id) для
Print, TextFontSet(text, id) для объекта Text, DeleteFont(id) для его
удаления.
Что дальше#
- Всё семейство команд, с каждым параметром: команды Font.
- Сам диалект: язык BASIC.