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

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

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


person Ricibald    schedule 17.12.2009    source источник
comment
оригинальная версия box2d: С++   -  person Ricibald    schedule 18.12.2009


Ответы (2)


Решение состоит в том, чтобы настроить свойства 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);
person Ricibald    schedule 03.02.2010

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

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

person Matt Montag    schedule 03.02.2010
comment
Смотрите мой ответ для решения! - person Ricibald; 03.02.2010
comment
Спасибо! Работает отлично. Я нашел пример использования mousejoint в Processing здесь: processing.org/discourse /yabb2/YaBB.pl?num=1213404906/30 и изменил его с учетом вашего предложения. - person Matt Montag; 04.02.2010
comment
Я не могу проголосовать за свой ответ! Пожалуйста, проголосуйте за него, чтобы ответ появился сверху! - person Ricibald; 04.02.2010
comment
Я тоже не могу. Мне нужно 15 репутации или что-то в этом роде. - person Matt Montag; 04.02.2010
comment
Я долго искал это. Я пытался переместить тело, просто касаясь и перетаскивая конкретное тело (на сенсорном устройстве). Но то, как я кодировал, инерционная задержка доставляла мне много проблем. Большое спасибо! - person Shekhar; 30.10.2012