|
@@ -11,16 +11,11 @@ brief: В этом руководстве описаны особенности
|
|
|
- OpenType
|
|
|
- BMFont
|
|
|
|
|
|
-
|
|
|
Шрифты, добавленные в проект, автоматически конвертируются в текстуру, которую Defold может визуализировать. Доступны два метода визуализации шрифтов, каждый из которых имеет свои преимущества и недостатки:
|
|
|
|
|
|
- Bitmap
|
|
|
- Distance field
|
|
|
|
|
|
-::: sidenote
|
|
|
-Вместо генерации и включения текстуры шрифта в состав приложения можно [генерировать глифы шрифта во время выполнения](/extension-fontgen) из встроенного шрифта TrueType. Такой подход может значительно сократить размер загрузки и потребление оперативной памяти в игре на Defold.
|
|
|
-:::
|
|
|
-
|
|
|
## Создание шрифта
|
|
|
|
|
|
Чтобы создать шрифт для использования в Defold, создайте новый файл Font, выбрав в меню <kbd>File ▸ New...</kbd>, затем <kbd>Font</kbd>. Можно также <kbd>кликнуть ПКМ</kbd> в нужном расположении в браузере ассетов и выбрать <kbd>New... ▸ Font</kbd>.
|
|
@@ -167,3 +162,79 @@ space ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E
|
|
|
`float horizontal_gradient = fract(var_texcoord0.y / texture_size_recip.w);`
|
|
|
|
|
|
Подробнее об унифицированных шейдерных переменных см. В [руководстве по шейдерам](/manuals/shader).
|
|
|
+
|
|
|
+## Генерация во время выполнения
|
|
|
+
|
|
|
+Возможно использовать генерацию шрифтов типа SDF (Distance Field) во время выполнения при использовании шрифтов TrueType (.ttf).
|
|
|
+Этот подход позволяет значительно уменьшить размер загрузки и потребление памяти во время выполнения в игре на Defold.
|
|
|
+Небольшой недостаток — небольшая задержка при генерации каждого глифа во время выполнения.
|
|
|
+
|
|
|
+Активируйте эту возможность, установив параметр `font.runtime_generation` в файле game.project.
|
|
|
+
|
|
|
+::: sidenote
|
|
|
+Эта функция на данный момент является экспериментальной, но планируется использовать её в качестве основного рабочего процесса в будущем.
|
|
|
+:::
|
|
|
+
|
|
|
+::: important
|
|
|
+Этот параметр влияет на все .ttf шрифты в проекте.
|
|
|
+:::
|
|
|
+
|
|
|
+### Предварительная генерация кэша глифов
|
|
|
+
|
|
|
+Чтобы упростить использование шрифтов, генерируемых во время выполнения, поддерживается предварительная генерация кэша глифов.
|
|
|
+Это означает, что шрифт сгенерирует глифы, указанные в поле *Characters* ресурса шрифта.
|
|
|
+
|
|
|
+::: sidenote
|
|
|
+Если установлено свойство `All Chars`, предварительная генерация не будет выполняться, так как это противоречит цели — не генерировать все глифы сразу.
|
|
|
+:::
|
|
|
+
|
|
|
+### Скриптование шрифтов
|
|
|
+
|
|
|
+Для шрифтов, генерируемых во время выполнения, можно добавлять и удалять подшрифты.
|
|
|
+Это полезно, если один большой шрифт был разделён на несколько файлов по наборам символов (например, для CJK).
|
|
|
+
|
|
|
+::: important
|
|
|
+Добавление подшрифта не приводит к автоматической загрузке или отображению всех глифов.
|
|
|
+:::
|
|
|
+
|
|
|
+```lua
|
|
|
+-- Добавить диапазон A-Z в .fontc
|
|
|
+local font_hash = hash("/assets/fonts/roboto.fontc")
|
|
|
+local ttf_hash = hash("/assets/fonts/Roboto/Roboto-Bold.ttf")
|
|
|
+local codepoint_min = 0x00000041 -- A
|
|
|
+local codepoint_max = 0x0000005A -- Z
|
|
|
+font.add_source(font_hash, ttf_hash, codepoint_min, codepoint_max)
|
|
|
+```
|
|
|
+
|
|
|
+```lua
|
|
|
+-- Удалить связанный ttf-ресурс
|
|
|
+local font_hash = hash("/assets/fonts/roboto.fontc")
|
|
|
+local ttf_hash = hash("/assets/fonts/Roboto/Roboto-Bold.ttf")
|
|
|
+font.remove_source(font_hash, ttf_hash)
|
|
|
+```
|
|
|
+
|
|
|
+Чтобы загрузить глифы в шрифт, необходимо вызвать `font.add_glyphs()`.
|
|
|
+Это асинхронная операция, и после её завершения можно безопасно отображать сообщения, содержащие эти глифы.
|
|
|
+
|
|
|
+```lua
|
|
|
+local function add_glyph_callback(self, id, result, errmsg)
|
|
|
+ if not result then
|
|
|
+ print("Запрос " .. id .. " завершился с ошибкой:", errmsg)
|
|
|
+ else
|
|
|
+ msg.post(some_url, "show_dialog")
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-- Загрузить глифы в шрифт
|
|
|
+local font_hash = hash("/assets/fonts/roboto.fontc")
|
|
|
+local glyphs = "Some text to be shown!" -- для наилучшей производительности используйте список уникальных глифов
|
|
|
+local request_id = font.add_glyphs(font_hash, ttf_hash, add_glyph_callback)
|
|
|
+```
|
|
|
+
|
|
|
+И, когда символы больше не нужны, можно освободить память:
|
|
|
+```lua
|
|
|
+-- Удалить глифы из памяти
|
|
|
+local font_hash = hash("/assets/fonts/roboto.fontc")
|
|
|
+font.remove_glyphs(font_hash, "Все символы из набора")
|
|
|
+```
|
|
|
+
|