Библиотека Cannon.js предоставляет мощный физический
движок для симуляции реального мира в 3D на JavaScript. Основой
физического мира в Cannon.js являются тела
(Body), которые представляют объекты с массой, формой,
положением и другими физическими свойствами. Для управления поведением
тел в симуляции используются типы тел, определяющие,
как объект взаимодействует с силами и другими телами. В Cannon.js
выделяются три ключевых типа: DYNAMIC,
STATIC, KINEMATIC.
DYNAMIC — это тело, полностью подчинённое законам физики. Оно реагирует на силы, столкновения и гравитацию.
Ключевые особенности:
applyForce), импульс (applyImpulse) или
задавать скорость напрямую (velocity).Пример создания DYNAMIC-тела:
const body = new CANNON.Body({
mass: 5, // Масса > 0 делает тело динамическим
shape: new CANNON.Sphere(1), // Форма объекта: сфера радиусом 1
position: new CANNON.Vec3(0, 10, 0) // Начальная позиция
});
world.addBody(body);
Практическое использование:
STATIC — это тело, которое не подвержено физическим силам. Оно используется для неподвижных объектов сцены, таких как пол, стены или препятствия.
Ключевые особенности:
velocity или применять силу не изменят положение
тела.Пример создания STATIC-тела:
const ground = new CANNON.Body({
mass: 0, // Масса 0 делает тело статическим
shape: new CANNON.Plane(), // Плоскость для пола
position: new CANNON.Vec3(0, 0, 0)
});
world.addBody(ground);
Практическое использование:
KINEMATIC — это промежуточный тип тела. Оно не подчиняется силам и гравитации, но может перемещаться по заданной траектории, влияя на динамические объекты.
Ключевые особенности:
position или velocity.Пример создания KINEMATIC-тела:
const movingPlatform = new CANNON.Body({
mass: 0,
type: CANNON.Body.KINEMATIC,
shape: new CANNON.Box(new CANNON.Vec3(5, 0.5, 5)),
position: new CANNON.Vec3(0, 2, 0)
});
world.addBody(movingPlatform);
// Перемещение платформы вручную
movingPlatform.position.x += 0.1; // Обновление координаты x
Практическое использование:
| Тип тела | Масса | Реакция на силы | Участие в столкновениях | Перемещение |
|---|---|---|---|---|
| DYNAMIC | > 0 | Да | Да | Под физикой |
| STATIC | 0 | Нет | Да | Нет |
| KINEMATIC | 0 | Нет | Да | Задаётся вручную |
Использование правильного типа тела позволяет создавать реалистичные сцены с точным контролем над поведением объектов, снижает нагрузку на движок и упрощает взаимодействие объектов друг с другом.