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 містить Box2D для моделювання 2D-фізики та Bullet для 3D-фізики. Налаштування Physics 2D у маніфесті застосунку (App Manifest) дає змогу вибрати Box2D Version 3, Box2D (Legacy Defold version) або None. За замовчуванням використовується попередня реалізація; Box2D 3 потрібно ввімкнути явно. Зміна реалізації може змінити результати моделювання й потребувати коригування налаштувань проєкту для Box2D, які залежать від версії.
Описані в цих посібниках компонентний підхід до роботи з об’єктами колізій (collision object) та модуль physics працюють з обома реалізаціями Box2D; вибір None вилучає 2D-фізику. Defold також надає низькорівневі API b2d, b2d.body, b2d.fixture, b2d.shape, b2d.joint, b2d.chain і b2d.world для прямого доступу до 2D-тіл, форм, з’єднань, ланцюгів і світів. Не кожна низькорівнева функція доступна в обох реалізаціях Box2D; звіряйте згенеровану документацію API кожної функції з реалізацією, вибраною в App Manifest.
Основні поняття фізичних рушіїв, які використовуються в Defold:
Крім самих об’єктів колізій, ви також можете визначати для них обмеження, більш відомі як з’єднання (joints), щоб поєднати два об’єкти колізій та обмежувати їхній рух або в інший спосіб прикладати силу й впливати на їхню поведінку під час фізичного моделювання. Дізнайтеся більше про з’єднання.
Ви також можете досліджувати фізичний світ і отримувати дані про нього вздовж прямого променя за допомогою трасування променя (ray cast). Дізнайтеся більше про трасування променів.
Фізичний рушій моделює ньютонівську фізику й розрахований на роботу з метрами, кілограмами та секундами (MKS). Крім того, фізичний рушій налаштовано для роботи з рухомими об’єктами розміром від 0.1 до 10 метрів (статичні об’єкти можуть бути більшими), а за замовчуванням рушій вважає 1 одиницю (піксель) рівною 1 метру. Таке перетворення між пікселями й метрами зручне на рівні моделювання, але з погляду створення гри воно не дуже корисне. За стандартних налаштувань форма колізій розміром 200 пікселів вважатиметься формою розміром 200 метрів, що значно виходить за межі рекомендованого діапазону, принаймні для рухомого об’єкта.
Зазвичай фізичне моделювання потрібно масштабувати, щоб воно коректно працювало з типовими розмірами об’єктів у грі. Масштаб фізичного моделювання можна змінити у файлі game.project за допомогою налаштування масштабу фізики. Наприклад, значення 0.02 означатиме, що 200 пікселів вважатимуться 4 метрами. Зауважте, що гравітацію (яку також змінюють у game.project) потрібно збільшити відповідно до зміни масштабу.
Рекомендується оновлювати фізичний рушій через однакові проміжки часу, щоб забезпечити стабільне моделювання (на відміну від оновлення через потенційно нерівномірні проміжки, що залежать від частоти кадрів). Ви можете використовувати фіксоване оновлення фізики, установивши прапорець Use Fixed Timestep у розділі Physics файлу game.project. Частота оновлення визначається налаштуванням Fixed Update Frequency у розділі Engine файлу game.project. Якщо для фізики використовується фіксований крок часу, також рекомендується використовувати функцію життєвого циклу fixed_update(self, dt) для взаємодії з об’єктами колізій вашої гри, наприклад для прикладання до них сил.