This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this tutorial in English
У цьому прикладі проєкту, який можна відкрити в редакторі або завантажити з GitHub, ми показуємо один зі способів створення дуже великих карт RPG у Defold. В основі цього підходу лежать такі припущення:
Спочатку запустіть приклад і пройдіться світом розміром 3x3 екрани, щоб ознайомитися з його будовою. Ви керуєте персонажем за допомогою клавіш зі стрілками.
Відкрийте “/main/main.collection”, щоб переглянути стартову колекцію (bootstrap collection) цього прикладу.

Головна колекція містить ігровий об’єкт (game object) персонажа гравця, яким можна керувати у 8 напрямках за допомогою клавіш зі стрілками, і другий ігровий об’єкт із назвою “game”, який керує перебігом гри. Об’єкт “game” складається зі скрипту й окремої фабрики колекцій для кожного екрана у грі. Назви фабрик відповідають схемі іменування сітки екранів.
Скрипт “/main/game.script” відстежує, на якому екрані зараз перебуває гравець. Він також реагує на користувацьке повідомлення “load_screen”. Це повідомлення завантажує новий екран і замінює ним поточний у напрямку руху героя. Спочатку екран завантажується в центр області відображення, і іншого екрана, з яким можна помінятися місцями, ще немає.
Героєм керує скрипт “/main/hero.script”. Скрипт перевіряє, чи перетнув ігровий об’єкт героя верхню, нижню, ліву або праву лінію поблизу краю екрана:

factory.create() для відповідного компонента collectionfactory. Вміст колекції розташовується за межами екрана.Усе це відбувається протягом секунди, тож перехід плавний і не порушує перебігу гри.
Кожен екран ігрового світу побудований в окремій колекції, яка містить карту плиток, об’єкт колізій та інші ігрові об’єкти, унікальні для цього екрана. Щоб спростити керування екранами та їх завантаження, колекції екранів названо за простою схемою:

Назва кожної колекції екрана відповідає її позиції в сітці світу. Перше число — це позиція X у сітці, а друге — позиція Y.
На панелі Assets знайдіть і відкрийте колекцію “/main/screens/0-0.collection”, яка описує екран у нижньому лівому куті карти:

Зверніть увагу на ігровий об’єкт із назвою “root”, який є батьківським для всього вмісту екрана. Це ще одна домовленість, використана в прикладі, і вона має дуже важливе призначення: коли екран переміщується в область перегляду, достатньо перемістити лише ігровий об’єкт “root”. Усі дочірні об’єкти автоматично переміщуються разом із кореневим батьківським об’єктом. Якщо на екрані є особливі ігрові об’єкти, їх також можна вільно анімувати, оскільки їхній рух відбувається відносно кореневого батьківського об’єкта. Коли екран прокручується в область перегляду або за її межі, ці дочірні об’єкти переміщуються разом з екраном. Спеціальний код потрібен лише тоді, коли об’єкт має переходити між екранами.
Бджоли на екрані 0-1 — простий приклад цієї ідеї:

Кожен екран має власну карту плиток, яку можна редагувати у вбудованому редакторі карт плиток. Проте головний недолік окремого редагування кожного екрана полягає в тому, що складно побачити, як він поєднується із сусідніми екранами, а це важливо для створення цілісного ігрового світу.
Саме для цього створено спеціальну колекцію. Відкрийте “/main/map/test_layout.collection”, щоб переглянути цю колекцію з тестовим макетом світу:

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

Будь-які зміни карти плиток екрана (тут на правій панелі) одразу відображаються в тестовій колекції (на лівій панелі). Також зауважте, що колекцію тестового макета не додано до статичної ієрархії, тому вона автоматично виключається з усіх збірок.
Як ви побачили, цей приклад побудований з урахуванням певних обмежень щодо ігрового світу й того, як ним пересувається герой. Якщо ваша гра має інші вимоги, вам, імовірно, знадобиться інше рішення. Наприклад, якщо камера у вашій грі має безперервно рухатися картою світу, вам потрібні інший спосіб поділу вмісту, інший механізм завантаження, а також інші інструменти для створення ігрового світу.
На цьому огляд прикладу карти RPG завершується. Як завжди, ви можете використовувати вміст прикладу на власний розсуд. Щоб дізнатися більше про Defold, перегляньте наші сторінки документації, де знайдете більше прикладів, уроків, посібників і документацію API.
Якщо виникнуть труднощі або запитання, завітайте на наш форум.
Приємної роботи з Defold!