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 не является строгим физическим симулятором и допускает некоторое прощение в перекрывающихся объектах, поэтому действительно кажется, что должен быть способ сделать это.