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

Будівельні блоки

В основі архітектури Defold лежать кілька понять, які дуже важливо добре зрозуміти. Цей посібник пояснює, з яких будівельних блоків складається Defold. Після нього переходьте до посібника з адресації та посібника з передавання повідомлень. У редакторі також є набір уроків для швидкого старту.

Будівельні блоки

Гра Defold складається з блоків трьох основних типів:

Колекція (collection)
Колекція — це файл, який використовується для організації вашої гри. У колекціях ви складаєте ієрархію з ігрових об’єктів та інших колекцій. Зазвичай колекції використовують для створення структури ігрових рівнів, груп ворогів або персонажів, які складаються з декількох ігрових об’єктів.
Ігровий об’єкт (game object)
Ігровий об’єкт — це контейнер, що має ідентифікатор, позицію, поворот та масштаб. Він містить компоненти. Зазвичай ігрові об’єкти використовуються для створення персонажів гравців, куль, системи ігрових правил або завантажувача рівнів.
Компонент (component)
Компоненти — це сутності, які додають до ігрових об’єктів, щоб надати їм візуальне, звукове та/або логічне представлення у грі. Зазвичай вони використовуються, щоб створювати спрайти (sprites) персонажів і файли скриптів, додавати звукові ефекти або ефекти частинок.

Колекції

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

Коли рушій Defold запускається, він завантажує єдину стартову колекцію (bootstrap collection), яку вказано у файлі налаштувань game.project. Стартова колекція зазвичай називається “main.collection”, але ви можете назвати її як завгодно.

Колекція може містити ігрові об’єкти та інші колекції (через посилання на файл підколекції) з довільною глибиною вкладеності. Ось, наприклад, файл “main.collection”. Він містить один ігровий об’єкт (з ідентифікатором “can”) та одну підколекцію (з ідентифікатором “bean”). Своєю чергою, підколекція містить два ігрові об’єкти: “bean” та “shield”.

Колекція

Зверніть увагу: підколекція “bean” зберігається у своєму окремому файлі під назвою “/main/bean.collection”, а “main.collection” на неї лише посилається:

Колекція bean

Самі колекції не можна адресувати, тому що під час виконання не існує об’єктів, відповідних колекціям “main” та “bean”. Однак іноді вам доведеться використовувати ідентифікатор колекції як частину шляху до ігрового об’єкта (докладніше див. посібник з адресації):

-- file: can.script
-- get position of the "bean" game object in the "bean" collection
local pos = go.get_position("bean/bean")

Колекція завжди додається до іншої колекції як посилання на файл колекції:

Клацніть правою кнопкою миші колекцію у вікні Структура (Outline) та оберіть Add Collection File.

Ігрові об’єкти

Ігрові об’єкти — це прості об’єкти, кожен зі своїм життєвим циклом під час виконання гри. Вони мають позицію, поворот та масштаб, які можна змінювати й анімувати під час виконання.

-- animate X position of "can" game object
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)

Ігрові об’єкти можна використовувати порожніми (наприклад, як маркери позиції), але зазвичай до них додають різноманітні компоненти: спрайти, звуки, скрипти, моделі, фабрики тощо. Ігрові об’єкти створюються в редакторі й розміщуються у файлах колекцій або створюються динамічно під час виконання за допомогою компонентів фабрик (factory).

Ігрові об’єкти додаються до колекції на місці (in-place) або за посиланням (by reference) на файл ігрового об’єкта:

Клацніть правою кнопкою миші колекцію у вікні Структура (Outline) та оберіть Add Game Object (додати на місці) або Add Game Object File (додати як посилання на файл).

Компоненти

Компоненти (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 (додати за посиланням на файл).

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

  • Script
  • GUI
  • Particle FX
  • Tile Map

Див. огляд компонентів із переліком усіх доступних типів компонентів.

Додавання об’єктів на місці або за посиланням

Коли ви створюєте файл колекції, ігрового об’єкта або компонента, ви створюєте так званий прототип (також відомий як “prefabs” або “blueprints” в інших рушіях). Такий файл лише додається до файлової структури проєкту; до запущеної гри нічого не додається. Щоб додати екземпляр (instance) колекції, ігрового об’єкта або компонента на основі файлу прототипу, додайте його до одного з файлів колекцій.

Ви можете побачити файл, на якому ґрунтується екземпляр об’єкта, у вікні структури (Outline). Файл “main.collection” містить три екземпляри, засновані на файлах:

  1. Підколекція “bean”.
  2. Компонент-скрипт “bean” в ігровому об’єкті “bean” у підколекції “bean”.
  3. Компонент-скрипт “can” в ігровому об’єкті “can”.

Екземпляр

Користь від створення файлів-прототипів стає очевидною, коли ви маєте кілька екземплярів ігрового об’єкта або колекції та бажаєте змінювати їх усі одночасно:

Екземпляри ІО

Після змін у файлі-прототипі всі екземпляри, що використовують такий файл, одразу оновляться.

Зміна прототипу ІО

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

Оновлені екземпляри ІО

Дочірні ігрові об’єкти (childing)

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

Дочірні ігрові об’єкти

Батьківсько-дочірня ієрархія об’єктів — це динамічний зв’язок, який визначає, як об’єкти реагують на трансформації. Будь-яку трансформацію об’єкта (переміщення, поворот або масштабування) буде також застосовано до дочірніх об’єктів як у редакторі, так і під час виконання:

Дочірня трансформація

І навпаки, переміщення дочірнього об’єкта виконуються в локальному просторі батьківського об’єкта. У редакторі ви можете вибрати, де редагувати дочірній ігровий об’єкт: у локальному або світовому просторі. Для цього оберіть Edit ▸ World Space (за замовчуванням) або Edit ▸ Local Space.

Батьківський об’єкт також можна змінити під час виконання, надіславши об’єкту повідомлення set_parent.

local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })

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