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, ви статично оголошуєте дерево ресурсів. Кожна частина гри пов’язана з цим деревом, починаючи зі стартової колекції (bootstrap collection), яка зазвичай має назву “main.collection”. Дерево ресурсів охоплює всі посилання та всі пов’язані з ними ресурси:

  • Дані ігрових об’єктів (game object) і компонентів (component): атласи, звуки тощо.
  • Прототипи компонентів-фабрик (factory): ігрові об’єкти й колекції (collection).
  • Посилання компонентів проксі колекції (collection proxy): колекції.
  • Користувацькі ресурси, оголошені в game.project.

Дерево ресурсів

У Defold також є поняття ресурсів пакета. Ресурси пакета включаються до пакета застосунку, але не є частиною дерева ресурсів. Ресурсами пакета можуть бути як допоміжні файли для певної платформи, так і зовнішні файли, які завантажуються з файлової системи та використовуються у вашій грі (наприклад, звукові банки FMOD).

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

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

  • Будь-яку колекцію, на яку є посилання, та її вміст.
  • Дані ігрових об’єктів і компонентів.
  • Прототипи компонентів-фабрик (ігрові об’єкти й колекції).

Однак під час виконання рушій не завантажуватиме автоматично такі типи ресурсів, на які є посилання:

  • Колекції ігрових світів, на які посилаються проксі колекцій. Ігрові світи відносно великі, тому їх завантаження й вивантаження потрібно вручну запускати в коді. Докладніше дивіться посібник із проксі колекції.
  • Файли, додані через налаштування Custom Resources у game.project. Ці файли завантажуються вручну за допомогою функції sys.load_resource().

Стандартний спосіб пакування й завантаження ресурсів у Defold можна змінити, щоб точніше керувати тим, як і коли ресурси потрапляють у пам’ять.

Завантаження ресурсів

Динамічне завантаження ресурсів фабрики

Ресурси, на які посилаються компоненти-фабрики, зазвичай завантажуються в пам’ять під час завантаження компонента. Щойно фабрика з’являється в середовищі виконання, ресурси вже готові для створення екземплярів (instance) у грі. Щоб змінити стандартну поведінку й відкласти завантаження ресурсів фабрики, достатньо встановити для неї прапорець Load Dynamically.

Динамічне завантаження

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

  1. Викличте factory.create() або collectionfactory.create(), коли захочете створити об’єкти. Це синхронно завантажить ресурси, а потім створить нові екземпляри.
  2. Викличте factory.load() або collectionfactory.load(), щоб асинхронно завантажити ресурси. Коли ресурси будуть готові для створення екземплярів, ви отримаєте зворотний виклик.

Докладніше про те, як це працює, читайте в посібнику з фабрик та посібнику з фабрик колекцій.

Вивантаження динамічно завантажених ресурсів

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

Для фабрик зі встановленим прапорцем Load Dynamically можна викликати функцію factory.unload() або collectionfactory.unload(). Цей виклик видаляє посилання компонента-фабрики на ресурс. Якщо на ресурс більше ніщо не посилається (наприклад, усі створені об’єкти видалено), ресурс буде вивантажено з пам’яті.

Виключення ресурсів із пакета

За допомогою проксі колекцій можна виключити з процесу пакування всі ресурси, на які посилається компонент. Це корисно, якщо потрібно звести розмір пакета до мінімуму. Наприклад, під час запуску гри у вебі як HTML5 браузер завантажує весь пакет перед виконанням гри.

Виключення

Якщо встановити для проксі колекції прапорець Exclude, ресурс, на який він посилається, буде виключено з пакета гри. Натомість ви можете зберігати виключені колекції у вибраному хмарному сховищі. У посібнику з Live update пояснено, як працює ця можливість.