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 включает Box2D для симуляции 2D-физики и Bullet для 3D-физики. Настройка Physics 2D в манифесте приложения позволяет выбрать Box2D Version 3, Box2D (Legacy Defold version) или None. По умолчанию используется прежняя реализация, а Box2D 3 включается явно. Смена реализации может изменить результаты симуляции и потребовать перенастройки зависящих от версии параметров проекта Box2D.

Описанные в руководствах компонентный подход к объектам столкновений и модуль physics работают с любой реализацией Box2D; выбор None исключает 2D-физику. Defold также предоставляет низкоуровневые API b2d, b2d.body, b2d.fixture, b2d.shape, b2d.joint, b2d.chain и b2d.world для прямой работы с 2D-телами, формами, сочленениями, цепями и мирами. Не все низкоуровневые функции доступны в обеих реализациях Box2D; сверяйте сгенерированную документацию каждой функции API с реализацией, выбранной в манифесте приложения.

Основные концепции физических движков, задействованных в Defold следующие:

  • Объекты столкновения — Объект столкновения является компонентом, который применяется для придания игровому объекту физического поведения. Объект столкновения обладает физическими свойствами, такими, как вес, трение и форма. Узнайте, как создаются объекты столкновений.
  • Формы столкновения — Объект столкновения может использовать либо несколько геометрических примитивов-форм либо одну сложную форму, определяющую пространственные пределы объекта. Узнайте, как добавлять формы к объектам столкновений.
  • Группы столкновений — Все объекты столкновения должны принадлежать предопределенной группе и каждый объект столкновения может определять список других групп, с которыми он может сталкиваться. Узнайте, как использовать группы столкновений.
  • Сообщения столкновения — Когда два объекта столкновений сталкиваются, физический движок посылает сообщения игровым объектам, которым принадлежат эти два компонента. Узнайте больше о сообщениях о столкновения.

В дополнении к объектам столкновения также можно задать ограничения объектов столкновения, более известные как сочленения (joints), чтобы соединить два объекта столкновения и ограничить или иными способами направить силу и повлиять на то, как они ведут себя в физической симуляции. Узнайте больше о сочленениях.

Вы также можете прощупывать и считывать физический мир вдоль линейного луча известного как проекционный луч. Узнайте больше о проекционных лучах.

Единицы измерения, применяемые физическими движками

Физические движки симулируют ньютоновскую физику и спроектированы для гладкой работы с метрами, килограммами и секундами (мкс) в качестве единиц измерения. Более того, физический движок откалиброван, чтобы гладко работать с движущимися объектами размеров в диапазоне от 0.1 до 10 метров (статические объекты могут быть больше), и по умолчанию движок трактует 1 единицу (пиксель) как 1 метр. Конвертация между пикселями и метрами удобна на уровне симуляции, но с точки зрения создания игры — это не очень полезно. Со стандартными настройками форма столкновений размером в 200 пикселей будет трактоваться как имеющая размер 200 метров, что далеко за пределами рекомендуемого диапазона, по крайней мере для движущегося объекта.

В целом, требуется, чтобы физическая симуляция была отмасштабирована для того, чтобы гладко работать с типовым размером объектов в игре. Масштаб физической симуляции может быть изменен в файле game.project в настройках масштаба физики. Выставление этого значения в, например 0.02, будет означать, что 200 пикселей будут трактоваться как 4 метра. Учтите также, что гравитация (также меняется в game.project) должна быть увеличена для согласования с измененным масштабом.

Обновления физики

Рекомендуется обновлять физический движок с фиксированным интервалом времени для обеспечения стабильной симуляции (в отличие от обновлений с переменной частотой кадров). Вы можете использовать фиксированное обновление физики, установив флажок Use Fixed Timestep setting в разделе Physics файла game.project. Частота обновления задаётся параметром Fixed Update Frequency setting в разделе Engine файла game.project. При использовании фиксированного шага времени для физики также рекомендуется использовать функцию жизненного цикла fixed_update(self, dt) для взаимодействия с объектами столкновений вашей игры, например, при применении к ним сил.

Предостережения и типовые проблемы

Прокси-коллекции
Через прокси-коллекции возможно загрузить более одной коллекции верхнего уровня или игрового мира в движок. Поступая так, важно держать в уме то, что каждая коллекция верхнего уровня — это отдельный физический мир. Физические взаимодействия (коллизии, триггеры и проекционные лучи) срабатывают только для объектов принадлежащих одному и тому же миру. Поэтому, даже если объекты столкновений из двух разных миров визуально располагаются один над другим, никакие физические взаимодействия между ними просчитываться не будут.
Столкновения не определяются
Если вы испытываете проблемы с тем, что столкновения не обрабатываются или не детектируются, то убедитесь, что вам знаком весь материал из секции по отладке физики в руководстве по отладке.