В библиотеке Cannon.js каждый объект физического
мира представлен классом Body. Эти объекты обладают
собственной физической динамикой: положением, скоростью, массой и
инерцией. Для эффективного управления взаимодействиями и состояниями тел
используются события, которые позволяют отслеживать
столкновения, переход в покой и пробуждение объектов.
collideСобытие collide возникает каждый раз, когда тело
сталкивается с другим объектом в мире. Оно позволяет реагировать на
физические контакты и вычислять силы удара, угол столкновения и другие
параметры взаимодействия.
bodyA.addEventListener("collide", function(event) {
const bodyB = event.body; // тело, с которым произошло столкновение
const contact = event.contact; // объект ContactEquation
console.log("Столкновение с телом:", bodyB.id);
console.log("Точка контакта:", contact.rj);
console.log("Нормаль контакта:", contact.ni);
});
Основные свойства события collide:
body — второе тело, участвующее в столкновении.contact — объект ContactEquation,
содержащий информацию о точке контакта, нормали и импульсе.target — тело, на котором зарегистрирован слушатель
(обычно это bodyA в примере выше).collide полезно использовать для:
sleepCannon.js реализует пассивное управление телами,
позволяя отключать их динамику при достижении состояния покоя для
повышения производительности. Когда тело прекращает движение и его
скорость становится меньше определенного порога, оно входит в состояние
сна. Это событие фиксируется через sleep.
body.addEventListener("sleep", function(event) {
console.log("Тело ушло в сон:", body.id);
});
Ключевые моменты:
body.allowSleep = true.body.sleepSpeedLimit.body.sleepTimeLimit.Событие sleep позволяет:
wakeupКогда тело, находящееся в состоянии сна, получает внешнее воздействие
(удар, сила, столкновение), оно “пробуждается”. Событие
wakeup уведомляет об этом изменение состояния.
body.addEventListener("wakeup", function(event) {
console.log("Тело пробуждено:", body.id);
});
Особенности работы wakeup:
Пробуждение может происходить при прикладывании силы
(body.applyForce), при столкновении с другим телом или при
прямом изменении скорости.
После пробуждения тело вновь участвует в полной динамике симуляции.
Событие wakeup можно использовать для:
Для всех типов событий рекомендуется:
collide или wakeup на
большом количестве тел могут снизить производительность.once для одноразовых
действий. Если интересует только первое столкновение или первое
пробуждение.event.body позволяет реагировать только на определенные
типы объектов.body.addEventListener("collide", function(event) {
if (event.body.type === Body.STATIC) {
console.log("Столкновение с неподвижным объектом");
}
});
sleep и wakeup с отключением расчета
столкновений для спящих тел.collide часто используется совместно с
ContactMaterial для контроля коэффициентов трения и
упругости при столкновениях.wakeup, если требуется
включить динамику тел без внешних воздействий:body.wakeUp();
События collide, sleep и
wakeup являются фундаментальными инструментами Cannon.js
для контроля физического поведения объектов, оптимизации симуляции и
интеграции логики взаимодействия тел с игровой или визуальной системой.
Они позволяют создавать реалистичные и отзывчивые физические миры,
управляя состояниями объектов в динамическом времени.