Skip to content

Commit de23340

Browse files
Site changes [skip-ci]
1 parent 3852093 commit de23340

File tree

1 file changed

+79
-6
lines changed

1 file changed

+79
-6
lines changed

ru/manuals/font.md

Lines changed: 79 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ toc:
1212
- Растровые шрифты BMFont
1313
- Артефакты и рекомендации
1414
- Кэш шрифта
15+
- Генерация во время выполнения
16+
- Предварительная генерация кэша глифов
17+
- Скриптование шрифтов
1518
---
1619

1720
# Ресурс Font
@@ -22,16 +25,11 @@ toc:
2225
- OpenType
2326
- BMFont
2427

25-
2628
Шрифты, добавленные в проект, автоматически конвертируются в текстуру, которую Defold может визуализировать. Доступны два метода визуализации шрифтов, каждый из которых имеет свои преимущества и недостатки:
2729

2830
- Bitmap
2931
- Distance field
3032

31-
<div class='sidenote' markdown='1'>
32-
Вместо генерации и включения текстуры шрифта в состав приложения можно [генерировать глифы шрифта во время выполнения](/extension-fontgen) из встроенного шрифта TrueType. Такой подход может значительно сократить размер загрузки и потребление оперативной памяти в игре на Defold.
33-
</div>
34-
3533
## Создание шрифта
3634

3735
Чтобы создать шрифт для использования в Defold, создайте новый файл Font, выбрав в меню <kbd>File ▸ New...</kbd>, затем <kbd>Font</kbd>. Можно также <kbd>кликнуть ПКМ</kbd> в нужном расположении в браузере ассетов и выбрать <kbd>New... ▸ Font</kbd>.
@@ -177,4 +175,79 @@ space ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E
177175

178176
`float horizontal_gradient = fract(var_texcoord0.y / texture_size_recip.w);`
179177

180-
Подробнее об унифицированных шейдерных переменных см. В [руководстве по шейдерам](/ru/manuals/shader).
178+
Подробнее об унифицированных шейдерных переменных см. В [руководстве по шейдерам](/ru/manuals/shader).
179+
180+
## Генерация во время выполнения
181+
182+
Возможно использовать генерацию шрифтов типа SDF (Distance Field) во время выполнения при использовании шрифтов TrueType (.ttf).
183+
Этот подход позволяет значительно уменьшить размер загрузки и потребление памяти во время выполнения в игре на Defold.
184+
Небольшой недостаток — небольшая задержка при генерации каждого глифа во время выполнения.
185+
186+
Активируйте эту возможность, установив параметр `font.runtime_generation` в файле game.project.
187+
188+
<div class='sidenote' markdown='1'>
189+
Эта функция на данный момент является экспериментальной, но планируется использовать её в качестве основного рабочего процесса в будущем.
190+
</div>
191+
192+
<div class='important' markdown='1'>
193+
Этот параметр влияет на все .ttf шрифты в проекте.
194+
</div>
195+
196+
### Предварительная генерация кэша глифов
197+
198+
Чтобы упростить использование шрифтов, генерируемых во время выполнения, поддерживается предварительная генерация кэша глифов.
199+
Это означает, что шрифт сгенерирует глифы, указанные в поле *Characters* ресурса шрифта.
200+
201+
<div class='sidenote' markdown='1'>
202+
Если установлено свойство `All Chars`, предварительная генерация не будет выполняться, так как это противоречит цели — не генерировать все глифы сразу.
203+
</div>
204+
205+
### Скриптование шрифтов
206+
207+
Для шрифтов, генерируемых во время выполнения, можно добавлять и удалять подшрифты.
208+
Это полезно, если один большой шрифт был разделён на несколько файлов по наборам символов (например, для CJK).
209+
210+
<div class='important' markdown='1'>
211+
Добавление подшрифта не приводит к автоматической загрузке или отображению всех глифов.
212+
</div>
213+
214+
```lua
215+
-- Добавить диапазон A-Z в .fontc
216+
local font_hash = hash("/assets/fonts/roboto.fontc")
217+
local ttf_hash = hash("/assets/fonts/Roboto/Roboto-Bold.ttf")
218+
local codepoint_min = 0x00000041 -- A
219+
local codepoint_max = 0x0000005A -- Z
220+
font.add_source(font_hash, ttf_hash, codepoint_min, codepoint_max)
221+
```
222+
223+
```lua
224+
-- Удалить связанный ttf-ресурс
225+
local font_hash = hash("/assets/fonts/roboto.fontc")
226+
local ttf_hash = hash("/assets/fonts/Roboto/Roboto-Bold.ttf")
227+
font.remove_source(font_hash, ttf_hash)
228+
```
229+
230+
Чтобы загрузить глифы в шрифт, необходимо вызвать `font.add_glyphs()`.
231+
Это асинхронная операция, и после её завершения можно безопасно отображать сообщения, содержащие эти глифы.
232+
233+
```lua
234+
local function add_glyph_callback(self, id, result, errmsg)
235+
if not result then
236+
print("Запрос " .. id .. " завершился с ошибкой:", errmsg)
237+
else
238+
msg.post(some_url, "show_dialog")
239+
end
240+
end
241+
242+
-- Загрузить глифы в шрифт
243+
local font_hash = hash("/assets/fonts/roboto.fontc")
244+
local glyphs = "Some text to be shown!" -- для наилучшей производительности используйте список уникальных глифов
245+
local request_id = font.add_glyphs(font_hash, ttf_hash, add_glyph_callback)
246+
```
247+
248+
И, когда символы больше не нужны, можно освободить память:
249+
```lua
250+
-- Удалить глифы из памяти
251+
local font_hash = hash("/assets/fonts/roboto.fontc")
252+
font.remove_glyphs(font_hash, "Все символы из набора")
253+
```

0 commit comments

Comments
 (0)