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) должна быть увеличена для согласования с измененным масштабом.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB