Весенний эффект в box2djs

Я хочу имитировать эффект весны, используя box2djs. После долгих поисков я понял, что это расстояние можно использовать (я не уверен). Я попробовал следующий код, но я не ищу никакого соединения между телом.

 distance_joint = new b2DistanceJointDef();

distance_joint.body1 = Body1;

distance_joint.body2 = Body2;

distance_joint.localAnchorA = new b2Vec2(0, 0);

distance_joint.localAnchorB = new b2Vec2(0, 0);

distance_joint.length = 3;

distance_joint.collideConnected = true;

return world.CreateJoint(distance_joint); 

Любая идея...

Спасибо

2 ответа

Вы правы, дистанционное соединение можно использовать как пружину. Это сказано в руководстве Box2D:

Дистанционное соединение также может быть мягким, как пружинно-демпферное соединение. Посмотрите веб-пример на тестовом стенде, чтобы увидеть, как это ведет себя.

Мягкость достигается настройкой двух констант в определении: частоты и коэффициента демпфирования. Думайте о частоте как о частоте гармонического осциллятора (как гитарная струна). Частота указана в герцах. Обычно частота должна быть меньше половины частоты временного шага. Так что, если вы используете шаг 60 Гц, частота стыка должна быть меньше 30 Гц. Причина связана с частотой Найквиста.

Коэффициент демпфирования не является размерным и обычно составляет от 0 до 1, но может быть больше. В 1 демпфирование является критическим (все колебания должны исчезнуть).

jointDef.frequencyHz = 4.0f;
jointDef.dampingRatio = 0.5f;

CreateJoint возвращает b2Joint(соединение создано), но это не проблема... Я обнаружил проблему. На самом деле я устанавливал местную опорную точку как

distance_joint.localAnchorA = new b2Vec2(0, 0);

distance_joint.localAnchorB = new b2Vec2(0, 0);

скорее я должен создать опорную точку в мире, как

distance_joint.anchorPoint1.Set(0.0, 0.0);

distance_joint.anchorPoint2.Set(0.0, 0.0);

Теперь сустав создан правильно. Еще одна проблема... так как я пытаюсь реализовать эффект пружины, я пытаюсь установить опорную точку в середине второго тела, но я не достигаю успеха.

любая идея..

Спасибо

Другие вопросы по тегам