Игнорирование массы из сварных соединений в box2d - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть круг, который катится по другим объектам и «подбирает» их. Моя текущая настройка использует WeldJoint для соединения и размещения выбранного объекта на краю круга. Затем я редактирую приспособления этих объектов, чтобы они стали датчиком, чтобы избежать реакции на столкновение. Круг перемещается с помощью applyForceToCenter () и небольшого импульса, чтобы начать работу. Это все работает.

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

Я пробовал различные методы, используя resetMassData (), MassData.mass = 0, setAwake (false), setActive (false) ...

Любая помощь приветствуется, спасибо.

Редактировать: я думал об использовании математической функции для спирали объекта вокруг круга, например Сделать спрайт по кругу . Я не уверен, что это путь с box2d в руке.

1 Ответ

2 голосов
/ 26 сентября 2011

Когда вы используете сварные соединения, вы не удаляете тела (которые имеют свою собственную массу), когда прикрепляете их к своему кругу. Поскольку вы просто предполагаете, что, как только что-то застревает в круге, что ему больше не нужно сталкиваться с чем-либо, хорошим решением было бы добавить их в качестве датчиков к вашему телу круга. Это потребует от вас удаления тела и добавления прибора в ваш круг.

Я думаю, было бы здорово, если бы больше объектов привело к увеличению массы вашего круга. Почему бы не сделать процедуру, которая определяет общую дополнительную массу, которая в настоящее время застряла на вашем мяче, и соответственно масштабировать силу толчка вашего мяча? Вы получите такое же ускорение, но вы получите реалистичное увеличение силы столкновения, генерируемой бесплатно. Не только это, но ваши сварные датчики также будут эффективно изменять инерцию, поэтому центр тяжести вашего мяча теперь будет отражать, как что-то застряло на нем! Это свободный реализм, поэтому я постараюсь воспользоваться этим. Кроме того, будет проще, чем написание кода, правильно перемещать приборы.

Кроме того, вы можете дополнительно уменьшить плотность вновь «залипшего» объекта, чтобы уменьшить эффект при необходимости.

...