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
Компоненти (components) надають ігровим об’єктам (game objects) певного вигляду та/або функціональності. Компоненти мають міститися всередині ігрових об’єктів, і на них впливають позиція, поворот та масштаб ігрового об’єкта, якому вони належать:

Багато компонентів мають властивості, специфічні для їхнього типу, які можна змінювати. Для взаємодії з компонентами під час виконання також доступні функції, специфічні для їхнього типу:
-- disable the can "body" sprite
msg.post("can#body", "disable")
-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )
Компоненти додають до ігрового об’єкта на місці (in-place) або за посиланням (by reference) на файл компонента:
Клацніть правою кнопкою миші ігровий об’єкт у вікні Outline і виберіть Add Component (додати на місці) або Add Component File (додати за посиланням на файл).
У більшості випадків доцільно створювати компоненти на місці, але компоненти наведених нижче типів потрібно спочатку створити в окремих файлах ресурсів, а потім додати до ігрового об’єкта за посиланням:
Defold підтримує такі типи компонентів (component):
Додаткові компоненти можна додати за допомогою розширень:
Компоненти ігрового об’єкта вмикаються під час його створення. Щоб вимкнути компонент, надішліть йому повідомлення disable:
-- disable the component with id 'weapon' on the same game object as this script
msg.post("#weapon", "disable")
-- disable the component with id 'shield' on the 'enemy' game object
msg.post("enemy#shield", "disable")
-- disable all components on the current game object
msg.post(".", "disable")
-- disable all components on the 'enemy' game object
msg.post("enemy", "disable")
Щоб знову ввімкнути компонент, надішліть йому повідомлення enable:
-- enable the component with id 'weapon'
msg.post("#weapon", "enable")
Усі типи компонентів Defold мають різні властивості. На панелі Properties редактора відображаються властивості компонента, вибраного на панелі Outline. Докладніше про доступні властивості компонентів читайте в посібниках для відповідних типів компонентів.
Візуальні компоненти зазвичай мають властивості позиції та повороту, а найчастіше ще й властивість масштабу. Ці властивості можна змінювати в редакторі, але майже в усіх випадках їх не можна змінювати під час виконання (єдиний виняток — масштаб компонентів спрайта та текстової мітки, який можна змінювати під час виконання).
Якщо потрібно змінити позицію, поворот або масштаб компонента під час виконання, натомість змініть позицію, поворот або масштаб ігрового об’єкта, якому належить цей компонент. Це також вплине на всі інші компоненти цього ігрового об’єкта. Якщо потрібно змінювати лише один із багатьох компонентів, прикріплених до ігрового об’єкта, рекомендовано перенести його в окремий ігровий об’єкт і додати цей об’єкт як дочірній до ігрового об’єкта, якому компонент належав спочатку.
Порядок відображення візуальних компонентів залежить від двох чинників:
Кожному компоненту призначено матеріал, а кожен матеріал має один або кілька тегів. Скрипт рендерингу, своєю чергою, визначає низку предикатів, кожен із яких відповідає одному або кільком тегам матеріалу. У функції update() скрипта рендерингу предикати відображаються один за одним, і для кожного предиката відображаються компоненти, що відповідають визначеним у ньому тегам. Стандартний скрипт рендерингу спочатку відображає спрайти та карти плиток за один прохід, а потім ефекти частинок за інший прохід, в обох випадках у світовому просторі. Далі скрипт рендерингу відображає компоненти GUI за окремий прохід в екранному просторі.
Усі ігрові об’єкти та компоненти розташовані в 3D-просторі, а їхні позиції задано об’єктами vector3. Коли ви переглядаєте графіку гри у 2D, значення X та Y визначають позицію об’єкта вздовж осей «ширини» та «висоти», а позиція Z визначає позицію вздовж осі «глибини». Позиція Z дає змогу керувати видимістю об’єктів, що перекриваються: спрайт зі значенням Z, рівним 1, відображатиметься перед спрайтом із позицією Z, рівною 0. За замовчуванням Defold використовує систему координат, у якій значення Z можуть бути від -1 до 1:

Компоненти, що відповідають предикату рендерингу, відображаються разом, а порядок їх відображення залежить від підсумкового значення z компонента. Підсумкове значення z компонента — це сума значень z самого компонента, ігрового об’єкта, якому він належить, і всіх батьківських ігрових об’єктів.
Порядок відображення кількох компонентів GUI не визначається їхнім значенням z. Порядком відображення компонентів GUI керує функція gui.set_render_order().
Приклад: два ігрові об’єкти A та B. B — дочірній об’єкт A. B має компонент спрайта.
| Об’єкт | Значення Z |
|---|---|
| A | 2 |
| B | 1 |
| B#sprite | 0.5 |

У наведеній вище ієрархії підсумкове значення z компонента спрайта в B становить 2 + 1 + 0.5 = 3.5.
Якщо два компоненти мають однакове значення z, порядок не визначений. Через це компоненти можуть мерехтіти, міняючись місцями, або відображатися в одному порядку на одній платформі та в іншому — на іншій.
Скрипт рендерингу визначає ближню та дальню площини для значень z. Компоненти, значення z яких виходять за межі цього діапазону, не відображатимуться. За замовчуванням діапазон становить від -1 до 1, але його легко змінити. Числова точність значень Z за ближньої та дальньої меж -1 і 1 дуже висока. Під час роботи з 3D-ресурсами вам може знадобитися змінити ближню та дальню межі стандартної проєкції у власному скрипті рендерингу. Докладніше читайте в посібнику з рендерингу.
Файл налаштувань game.project містить багато значень, які задають максимальну кількість ресурсів певного типу, що можуть існувати одночасно. Часто цю кількість рахують окремо для кожної завантаженої колекції (collection), яку також називають світом. Рушій Defold використовує ці максимальні значення, щоб заздалегідь виділити пам’ять для відповідної кількості ресурсів і уникнути динамічного виділення та фрагментації пам’яті під час роботи гри.
Структури даних Defold для представлення компонентів (components) та інших ресурсів оптимізовано для мінімального споживання пам’яті. Утім, ці значення слід задавати обачно, щоб не виділяти більше пам’яті, ніж насправді потрібно.
Щоб додатково оптимізувати використання пам’яті, під час збирання Defold аналізує вміст гри й перевизначає максимальні значення, якщо точну кількість можна встановити напевно: