Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Розмітка форматованого тексту

Використовуйте розмітку в компонентах Label і текстових вузлах GUI, щоб застосовувати вкладені візуальні стилі й ефекти та інспектувати посилання й спрайти з Lua.

go.set("#label", "text", "Score: <color=#69D2E7>1200</color>")

Також можна визначити для шрифту іменований стиль об’єкта для повторного використання й вибрати його в посиланні:

local fontpath = "/fonts/ui.fontc"
font.set_style(fontpath, "menu_link", "<color=#69D2E7>")
go.set("#label", "text", "Open <link style=menu_link src=inventory>inventory</link>")

Довідник тегів

Тег Призначення Приклад
color Задати колір заливки гліфа. Зелений текст
size Змінити формування гліфів і розмір компонування. Текст розміром 24 пікселі
gradient Застосувати статичний або анімований колірний градієнт. Текст із горизонтальним градієнтом
ul Підкреслити текст. Підкреслений текст
strike Закреслити текст. Закреслений текст
outline Задати товщину й колір обведення гліфа. Текст з обведенням
shadow Додати тінь до тексту. Текст із тінню
shake Застосувати анімоване випадкове зміщення. Текст, що тремтить
wave Рухати текст анімованою синусоїдальною хвилею. Текст, що рухається хвилею
sprite Додати вбудований об’єкт спрайта. Вбудований спрайт
link Додати інтерактивний об’єкт посилання. Текст посилання

Синтаксис

Назви тегів і атрибутів чутливі до регістру. Парний тег застосовується до видимого тексту UTF-32 усередині нього. Об’єкти спрайтів використовують самозакривні теги.

<color=#69D2E7>colored text</color>
<ul pattern=dashed>underlined text</ul>
<outline size=2 color=#000000>outlined text</outline>
<shadow x=2 y=-2 color=#00000080>shadowed text</shadow>
<sprite src=images/icon.png width=2em/>

Атрибути

Атрибути можна записувати без лапок, якщо вони не містять пробільних символів, або в одинарних чи подвійних лапках. color і size підтримують скорочений запис першого значення, а також іменовану форму value.

<color=#FF8800>Orange</color>
<color value="#FF8800">Orange</color>
<size='120%'>Larger</size>

Вкладеність

Теги мають закриватися у зворотному порядку до відкриття: останній відкритий закривається першим. Значення внутрішнього стилю перевизначають ту саму властивість зовнішнього стилю. Різні властивості поєднуються. Ефекти фрагментів залишаються активними незалежно, тому вкладені градієнти перемножують кольори, а вкладені ефекти позиції додають свої зміщення.

<color=#FFCC00>
    Gold <outline size=2 color=#000000>with a black outline</outline>
</color>

Символьні посилання

Для зарезервованих символів у видимому тексті використовуйте &amp;, &apos;, &gt;, &lt; і &quot;. Числові символьні посилання наразі не підтримуються.

Теги

Теги форматованого тексту або оформлюють охоплений фрагмент тексту, або описують об’єкт, який можна інспектувати з Lua. Теги стилів мають відповідний закривний тег. Об’єкт sprite є самозакривним, а link охоплює текст посилання.

color

Задає колір заливки гліфа. Для кольорів використовуються #RRGGBB або #RRGGBBAA. Префікс решітки обов’язковий; 0xFF0000 і FF0000 недопустимі. Результат множиться на базовий колір напису або засобу рендерингу.

Атрибут Обов’язковий За замовчуванням Значення
=color або value=color Так Немає Колір заливки в шістнадцятковій формі RGB або RGBA.
<color=#00FF00>Opaque green</color>
<color=#00FF0080>Half-alpha green</color>

#00FF00

Текст прикладу, відображений непрозорим зеленим

#00FF0080

Текст прикладу, відображений напівпрозорим зеленим

size

Змінює формування гліфів і розмір компонування, а не лише масштаб вершин. Відносні значення завжди використовують базовий розмір шрифту компонування. Вони не накопичуються з охоплювальним тегом size.

Атрибут Обов’язковий За замовчуванням Значення
=size або value=size Так Немає Абсолютний розмір, відсоток, кратне значення базового розміру або зміщення зі знаком від базового розміру в одній із наведених нижче форм.
Форма Приклад для 32 px Обчислений розмір
Число без суфікса або px 24, 24px 24 px
Відсоток від базового розміру 120% 38.4 px
Кратне значення базового розміру 2em 64 px
Зміщення зі знаком від базового розміру +4, -4 36 px, 28 px
<size=24px>Exactly 24 pixels</size>
<size=120%>120% of the layout base size</size>
<size=2em>Twice the layout base size</size>

24px

Текст прикладу, відображений розміром 24 пікселі

120% від 32px

Текст прикладу, відображений розміром 120 відсотків від 32 пікселів

2em від 32px

Текст прикладу, відображений удвічі більшим за базовий розмір 32 пікселі

gradient

Градієнт приймає рівно один повний набір атрибутів. Не можна змішувати набори або пропускати окремий атрибут набору.

Режим Обов’язкові атрибути Інтерполяція
Горизонтальний left, right Інтерполює між двома кольорами по горизонталі.
Вертикальний bottom, top Інтерполює між нижнім і верхнім кольорами.
За чотирма кутами tl, tr, bl, br Інтерполює між кольорами чотирьох вершин.
Атрибут Обов’язковий За замовчуванням Значення
left, right Для горизонтального режиму Немає Кольори горизонтальних кінцевих точок у формі #RRGGBB або #RRGGBBAA. Обидва обов’язкові.
bottom, top Для вертикального режиму Немає Кольори вертикальних кінцевих точок. Обидва обов’язкові.
tl, tr, bl, br Для режиму за чотирма кутами Немає Кольори верхнього лівого, верхнього правого, нижнього лівого й нижнього правого кутів. Усі чотири обов’язкові.
fit Ні span glyph вибирає колір для кожної позиції сформованого тексту; span розподіляє градієнт по всьому тексту, охопленому тегом.
hz Ні 0 Кількість повних циклів перетікання за секунду в діапазоні [0,); нуль залишає градієнт статичним.
direction Ні forward forward або reverse. Керує напрямком перетікання, коли hz не дорівнює нулю.

Якщо fit не вказано, fit=span розподіляє градієнт по всьому тексту, охопленому тегом. fit=glyph незалежно вибирає колір для кожної позиції сформованого тексту. Необов’язковий hz задає кількість повних циклів анімації перетікання за секунду; його стандартне нульове значення залишає градієнт статичним. Повторювана дзеркальна шкала кольорів плавно перетікає й починається знову без стрибка кольору. За замовчуванням використовується direction=forward; задайте direction=reverse, щоб змінити напрямок перетікання.

<gradient left=#FF00FF right=#FFFFFF>Horizontal Gradient</gradient>

<gradient hz=0.25 fit=glyph bottom=#182848 top=#4B6CB7>Animated vertical glyphs</gradient>

<gradient hz=0.25 direction=reverse left=#FF0000 right=#0000FF>Reverse flow</gradient>

<gradient hz=0.25 direction=reverse fit=span left=#FF0000 right=#0000FF>One animated span color</gradient>

<gradient fit=glyph tl=#FF0000 tr=#00FF00 bl=#0000FF br=#FFFFFF>
    Four corners
</gradient>

Горизонтальний

Текст прикладу з горизонтальним градієнтом від пурпурового до білого

Вертикальний

Текст прикладу з вертикальним синім градієнтом

За чотирма кутами

fit=glyph

Текст прикладу з градієнтом за чотирма кутами, застосованим до кожного гліфа

fit=span

Текст прикладу з градієнтом за чотирма кутами, застосованим до фрагмента

Анімований

fit=glyph

Анімований градієнт із перетіканням, застосований до кожного гліфа

fit=span

Анімований градієнт із перетіканням, застосований до фрагмента

Кольори градієнта множаться на поточний колір заливки. Тому градієнт усередині color=#808080 не може створити канал, яскравіший за цей базовий множник.

ul

Малює підкреслення, використовуючи метрики підкреслення шрифту, якщо вони доступні. Тег не має окремого кольору: лінія успадковує фактичний колір заливки, зокрема горизонтальні й вертикальні градієнти та градієнти за чотирма кутами.

Атрибут Обов’язковий За замовчуванням Значення
pattern Ні solid solid або dashed.
<ul>Solid underline</ul>
<ul pattern=dashed>Dashed underline</ul>
<ul><gradient left=#FF00FF right=#FFFFFF>Gradient line</gradient></ul>

Суцільний

Текст прикладу із суцільним підкресленням

Штриховий

Текст прикладу зі штриховим підкресленням

Градієнтний

Текст прикладу з градієнтним підкресленням

strike

Малює лінію крізь охоплений текст. Приймає ті самі значення pattern, що й ul, і так само успадковує фактичний колір заливки.

Атрибут Обов’язковий За замовчуванням Значення
pattern Ні solid solid або dashed.
<strike>No longer available</strike>
<strike pattern=dashed>Dashed strikethrough</strike>

Суцільний

Текст прикладу із суцільним закресленням

Штриховий

Текст прикладу зі штриховим закресленням

outline

Задає товщину обведення, його колір або обидва параметри. Потрібен щонайменше один атрибут. Нульова товщина явно вимикає обведення для фрагмента.

Атрибут Обов’язковий За замовчуванням Значення
size Один із size/color Успадковується; 0 у стандартного шрифту Товщина в одиницях компонування, діапазон [0,). Суфікси одиниць не допускаються.
color Один із size/color Успадковується; #000000 у стандартного напису Один колір обведення в шістнадцятковій формі RGB (#RRGGBB) або RGBA (#RRGGBBAA); альфа-компонент керує непрозорістю.
<outline size=3 color=#000000>Black outline</outline>
<outline color=#FF0000>Keep inherited width, change color</outline>
<outline size=0>Disable inherited outline</outline>

Зовнішнє чорне обведення

Текст прикладу із зовнішнім чорним обведенням

shadow

Додає чітку тінь до охопленого тексту. Потрібен щонайменше один атрибут. Атрибути, пропущені у вкладеному тегу, зберігають значення зовнішньої тіні; атрибути, пропущені в зовнішньому тегу найвищого рівня, зберігають базове значення тіні шрифту.

Атрибут Обов’язковий За замовчуванням Значення
color Ні Успадковується; #000000 у стандартного напису Колір тіні у формі #RRGGBB або #RRGGBBAA.
x Ні Успадковується; 0 у стандартного шрифту Горизонтальне зміщення тіні в одиницях компонування. Додатні значення зміщують її праворуч.
y Ні Успадковується; 0 у стандартного шрифту Вертикальне зміщення тіні в одиницях компонування. Додатні значення зміщують її вгору.
blur Ні Успадковується; 0 у стандартного шрифту Радіус розмиття в одиницях компонування, діапазон [0,).
<shadow x=6 y=-6 blur=4 color=#000000A0>Shadow</shadow>
<shadow x=-2>Override only the horizontal offset</shadow>

x=6, y=-6, blur=4

Текст прикладу зі зміщеною тінню

Розмиття тіні генерується й зберігається в атласі гліфів. Фрагмент може запитати менше розмиття, ніж заздалегідь згенероване розмиття шрифту; більші значення зберігаються в компонуванні, але наразі рендеряться з найбільшим розмиттям, доступним в атласі.

shake

Застосовує детерміноване анімоване випадкове зміщення без зміни перенесення рядків або меж компонування. Ефект самостійно відстежує час; скриптам не потрібно змінювати текст напису для кожного кадру анімації.

Атрибут Обов’язковий За замовчуванням Допустимі значення Значення
hz Ні 20 [0,) Кількість переходів до випадкових цільових позицій за секунду. Нуль призупиняє ефект.
amplitude Ні 0.5 [0,) Максимальне зміщення в одиницях компонування.
fit Ні glyph glyph або span glyph вибирає зміщення для кожної сформованої одиниці гліфів, зберігаючи цілісність кластерів. span переміщує весь фрагмент тексту, охоплений тегом, як єдине жорстке ціле.
<shake>Default shake</shake>
<shake hz=12 amplitude=0.8 fit=glyph>Glyph shake</shake>
<shake hz=12 amplitude=0.8 fit=span>Rigid span shake</shake>

fit=glyph

Текст прикладу з анімованим тремтінням окремих гліфів

fit=span

Текст прикладу з анімованим тремтінням усього фрагмента

wave

Рухає символи вгору й униз анімованою синусоїдальною хвилею без зміни перенесення рядків або меж компонування. Компонування накопичує час анімації під час оновлення.

Атрибут Обов’язковий За замовчуванням Значення
amplitude Ні 1 Максимальне вертикальне зміщення в одиницях компонування, діапазон [0,).
hz Ні 1 Кількість повних часових циклів за секунду, діапазон [0,). Нуль призупиняє хвилю.
wavelength Ні 6 Кількість позицій видимого тексту UTF-32 на повний просторовий цикл, діапазон [1,). Символи, які шрифт формує разом, як-от базовий символ і його комбінований діакритичний знак, рухаються як одне ціле.
fit Ні glyph glyph застосовує просторову хвилю вздовж тексту. span задає всьому фрагменту тексту, охопленому тегом, спільне вертикальне синусоїдальне зміщення.
direction Ні forward forward рухає хвилю у звичайному напрямку. reverse змінює напрямок її руху на протилежний.
<wave>Animated character wave</wave>
<wave amplitude=4 hz=3 wavelength=8 fit=glyph>Travelling wave</wave>
<wave amplitude=4 hz=3 wavelength=8 fit=glyph direction=reverse>Reverse travelling wave</wave>
<wave amplitude=4 hz=1 fit=span>Whole span moves together</wave>

fit=glyph

Текст прикладу з анімованим хвильовим рухом окремих гліфів

fit=span

Текст прикладу, що рухається як один анімований фрагмент

sprite

Додає самозакривний об’єкт спрайта в поточній позиції видимого тексту. Його атрибути зберігаються як метадані для label.get_layout_objects() і gui.get_layout_objects().

Атрибут Обов’язковий За замовчуванням Значення
id Ні Генерується Стабільний ідентифікатор, хеш якого записується до id поверненого об’єкта компонування.
src Ні Немає Визначений застосунком ідентифікатор ресурсу спрайта, як-от шлях зображення або атласу в проєкті.
animation Ні Немає Визначений застосунком ідентифікатор анімації в ресурсі.
width Ні 1em Обчислена ширина спрайта.
height Ні 1em Обчислена висота спрайта.
Будь-який інший атрибут Ні Відсутній Визначені застосунком метадані, що зберігаються для обробника об’єктів і API об’єктів компонування.
A <sprite src=engine/engine/content/builtins/assets/images/logo/logo_256.png/> logo
<sprite src=images/banner.png width=4em height=2em/>
<sprite src=images/icons.atlas animation=coin width=2em/>

Відображений вбудований спрайт

Логотип Defold, відображений у рядку тексту

Розміри приймають додатні значення в одиницях компонування без суфікса, px, em або %. Як em, так і % використовують базовий розмір шрифту компонування тексту.

Кожен пропущений розмір незалежно приймає стандартне значення 1em. Якщо пропустити обидва, утвориться об’єкт 1em × 1em; якщо вказати лише ширину, висота не обчислюватиметься автоматично зі співвідношення сторін ресурсу.

Тег sprite — це лише заповнювач, на місці якого розробник може розмістити будь-який об’єкт!

Описує діапазон видимого тексту як об’єкт посилання. Охоплений текст компонується звичайним чином і за замовчуванням отримує іменований стиль link. Компоненти Label і GUI вибирають link:hover та link:active у відповідь на введення без повторного формування тексту. Про повідомлення, які виникають під час взаємодії з посиланням, читайте в розділі Повідомлення взаємодії.

Атрибут Обов’язковий За замовчуванням Значення
src Ні Немає Визначена застосунком ціль посилання. Значення повертається як рядок без автоматичної перевірки або переходу.
id Ні Генерується Стабільний ідентифікатор, хеш якого записується до id поверненого об’єкта компонування.
style Ні link Іменований стандартний стиль тексту посилання.
Будь-який інший атрибут Ні Відсутній Визначені застосунком метадані, як-от ідентифікатор, дія, підказка або значення для аналітики.
<ul><link id=website src=https://www.defold.com>www.defold.com</link></ul>
<link id=inventory style=menu_link action=open_inventory item=sword>Iron sword</link>

style=link

www.defold.com зі стандартним стилем посилання й підкресленням

Компонент відстежує стан вказівника для кожного посилання. Він застосовує link:hover, поки вказівник перебуває над посиланням, і link:active, поки натискання утримується. Коли жоден із цих станів не діє, компонент відновлює стиль, указаний атрибутом style посилання, або link, якщо атрибут відсутній.

Повідомлення взаємодії

Взаємодія з посиланнями використовує звичайну систему введення Defold. Додайте прив’язку Mouse Trigger для MOUSE_BUTTON_LEFT, яка також вмикає введення одним дотиком, і отримайте фокус введення у скрипті ігрового об’єкта або скрипті GUI:

function init(self)
    msg.post(".", "acquire_input_focus")
end

Докладні відомості про налаштування наведено в розділах Фокус введення і Введення мишею й дотиком.

Коли компонент напису або GUI отримує введення від вказівника, посилання породжують наведені нижче повідомлення. Повідомлення написів надсилаються ігровому об’єкту, якому вони належать; повідомлення GUI — скрипту GUI.

Повідомлення Коли надсилається
text_object_hovered Вказівник входить у ділянку посилання.
text_object_unhovered Вказівник виходить із ділянки посилання.
text_object_clicked Натискання відпущено над тим самим посиланням.

Кожне повідомлення містить такі поля:

Поле Тип Опис
id hash Атрибут id об’єкта або його згенерований ідентифікатор об’єкта компонування.
type hash Тип об’єкта компонування, наразі hash("link").
src string Визначене застосунком значення атрибута src об’єкта або порожній рядок, якщо атрибут відсутній.
function on_message(self, message_id, message)
    if message_id == hash("text_object_clicked") then
        assert(message.type == hash("link"))
        print(message.id, message.src)
    end
end

Іменовані стилі

Кожна колекція шрифтів містить іменовані стилі об’єктів, які впливають лише на рендеринг. Посилання використовує стиль, указаний його атрибутом style, або link, якщо атрибут відсутній. Загального тегу <style> для фрагментів немає.

Defold надає такі стандартні значення:

Стиль Множник кольору заливки Декорування
link (0.10, 0.45, 0.90, 1.0) Суцільне підкреслення
link:hover (0.30, 0.65, 1.00, 1.0) Немає
link:active (0.05, 0.30, 0.70, 1.0) Немає

Визначте стиль текстовим рядком, що містить відкривні теги. Теги неявно закриваються у зворотному порядку, тому закривні теги й видимий текст не допускаються.

font.set_style("/fonts/ui.fontc", "link",
    "<color=#2673ff><outline color=#000000 size=1>")

font.set_style("/fonts/ui.fontc", "link:hover",
    "<color=#66b3ff><shake amplitude=0.2 hz=20>")

Теги застосовуються зліва направо, ніби вони вкладені навколо тексту об’єкта. Стиль об’єкта, вибраний у виклику, застосовується після стандартного стилю. Якщо кілька тегів задають ту саму властивість рендерингу, пізніше застосоване значення перевизначає попередні. Ефекти додаються в порядку зліва направо.

Виклик font.set_style() замінює властивості рендерингу й ефекти цього іменованого стилю. Декорування, визначене ресурсом, залишається незмінним, тому перевизначення link не вилучає його стандартного підкреслення. Іменовані стилі приймають теги, які впливають лише на рендеринг, як-от color, outline, shadow, gradient, wave і shake. Теги зміни компонування, декорування та об’єктів відхиляються.

API об’єктів компонування

Використовуйте label.get_layout_objects() або gui.get_layout_objects(), щоб отримати об’єкти sprite і link зі скомпонованого тексту.

label.get_layout_objects()

objects = label.get_layout_objects(url)
Аргумент Тип Опис
url string, hash або url Компонент напису для інспектування, наприклад "#label".

gui.get_layout_objects()

objects = gui.get_layout_objects(node)
Аргумент Тип Опис
node node Текстовий вузол GUI для інспектування, наприклад gui.get_node("rich_text").

Обидві функції повертають новостворений масив із поточними об’єктами компонування в порядку їх появи у вихідному тексті. Якщо текст не містить тегів об’єктів, вони повертають порожній масив. Оскільки об’єкти та їхні атрибути копіюються до Lua під час кожного виклику, кешуйте результат і запитуйте його знову після зміни тексту або іншої властивості, яка змінює його компонування.

Поля поверненого об’єкта

Поле Тип Опис
type string "sprite" або "link".
id hash Ідентифікатор об’єкта, який використовується в повідомленнях взаємодії.
text_offset number Позиція у видимому тексті з відліком від нуля, виміряна в кодових точках Unicode. Розмітка не враховується, а символьні посилання рахуються як декодовані символи. Для спрайта це точка його вставлення.
text_length number Довжина охопленого видимого тексту в кодових точках Unicode. Спрайт має довжину один завдяки вставленій кодовій точці заміни об’єкта U+FFFC.
width number Обчислена ширина в одиницях компонування тексту. Наразі ширина посилань дорівнює нулю.
height number Обчислена висота в одиницях компонування тексту. Наразі висота посилань дорівнює нулю.
x number Горизонтальна позиція нижнього лівого кута об’єкта відносно початку координат у верхньому лівому куті компонування тексту.
y number Вертикальна позиція нижнього лівого кута об’єкта відносно початку координат у верхньому лівому куті компонування тексту.
attributes table Усі атрибути тегу як пари рядкових ключів і значень. Значення атрибутів зберігають свій вихідний запис, наприклад "2em". Скорочене неіменоване значення зберігається під ключем value.

text_offset і text_length не є байтовими зміщеннями UTF-8. Символ поза ASCII, як-от å або , рахується як одна позиція.

Приклад Lua

local text = [[
Read the <link src=https://defold.com/manuals/ id=manual>manual</link>
or inspect <sprite src=images/info.png width=2em/> for more information.
]]

go.set("#label", "text", text)

local objects = label.get_layout_objects("#label")
for _, object in ipairs(objects) do
    if object.type == "link" then
        print("link", object.attributes.src)
        print("visible range", object.text_offset, object.text_length)
        print("position", object.x, object.y)
    elseif object.type == "sprite" then
        print("sprite", object.x, object.y, object.width, object.height)
        pprint(object.attributes)
    end
end

local gui_objects = gui.get_layout_objects(gui.get_node("rich_text"))

Корисні поєднання

Кольорове обведення з горизонтальним градієнтом

<outline size=2 color=#101820>
    <gradient left=#FEE715 right=#FF6F61>Gradient title</gradient>
</outline>

Градієнт множить лише колір заливки; обведення зберігає власний колір.

Тремтіння речення й градієнт одного слова

<shake hz=20 amplitude=0.5>
    This <gradient left=#FF00FF right=#FFFFFF>whole</gradient> text shakes!
</shake>

Зовнішній ефект позиції застосовується до кожного гліфа. Вкладений колірний ефект застосовується лише до «whole».

Перевизначення однієї властивості зі збереженням інших

<color=#FFFFFF><outline size=2 color=#000000>
    Normal <color=#FF4040>warning</color> normal
</outline></color>

Внутрішній колір змінює заливку, зберігаючи успадковані товщину й колір обведення.