Box2d: mousejoint без инерционной задержки

Я использую mousejoint для перетаскивания тел в box2d, но это вызывает инерционную задержку.

Существует ли какой-либо способ мгновенно перетащить тело?

Ответ 1

Решение заключается в настройке характеристик frequencyHz и dampingRatio в вашем b2MouseJointDef.

Например:

b2MouseJointDef md;
md.body1 = _groundBody;
md.body2 = body;
md.target = p;
md.maxForce = 10000.0f * body->GetMass();
md.dampingRatio = 0;
md.frequencyHz = 100;
_world->CreateJoint(&md);

Ответ 2

Я пытаюсь реализовать игру в стиле понг в библиотеке Processing/Box2d, и я ожидаю, что у меня будет такая же проблема. Одна вещь, которая приходит на ум, состоит в том, чтобы сохранить скрытый объект в мире Box2d, который работает с суставами обычным способом, а затем нарисовать виртуальный объект, который следует за мышью без задержки кадра. Это может быть достаточно, чтобы обмануть пользователя.

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