title: Физика
Defold включает модифицированную версию физического движка Box2D (версия 2.2.1) для симуляций 2D-физики, а также физический движок Bullet (версии 2.77) для 3D-физики. Это позволяет симулировать ньютоновские физические взаимодействия между разными типами объектов столкновения. Данное руководство объясняет принцип работы этих движков.
Основные концепции физических движков, задействованных в 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 того же файла. При использовании фиксированного шага времени для физики также рекомендуется использовать функцию жизненного цикла fixed_update(self, dt)
для взаимодействия с объектами столкновений вашей игры, например, при применении к ним сил.
Прокси-коллекции : Через прокси-коллекции возможно загрузить более одной коллекции верхнего уровня или игрового мира в движок. Поступая так, важно держать в уме то, что каждая коллекция верхнего уровня --- это отдельный физический мир. Физические взаимодействия (коллизии, триггеры и проекционные лучи) срабатывают только для объектов принадлежащих одному и тому же миру. Поэтому, даже если объекты столкновений из двух разных миров визуально располагаются один над другим, никакие физические взаимодействия между ними просчитываться не будут.
Столкновения не определяются : Если вы испытываете проблемы с тем, что столкновения не обрабатываются или не детектируются, то убедитесь, что вам знаком весь материал из секции по отладке физики в руководстве по отладке.