Selaa lähdekoodia

actualize ru for fonts

AGulev 1 kuukausi sitten
vanhempi
commit
7c72e59d33
1 muutettua tiedostoa jossa 76 lisäystä ja 5 poistoa
  1. 76 5
      docs/ru/manuals/font.md

+ 76 - 5
docs/ru/manuals/font.md

@@ -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, "Все символы из набора")
+```
+