В Box2D, импульсы рассчитаны для перемещения двух тел, соединенных таким образом, что совместные ограничения выполнены (например, для книзу суставов ограничений являются точкой привязки и пределы угла). Эти импульсы распределяются между двумя телами, так что учитывается влияние их массы.
Два тела одинаковой массы будут двигаться одинаково, чтобы исправить совместное ограничение. Когда тела имеют разные массы, более легкое тело имеет тенденцию «подчиняться» более тяжелому телу и двигаться больше, чтобы исправить ограничение, чем тяжелое тело, как если бы среди них был какой-то «порядок клевания». Проблемы возникают, когда более легкое тело соединяется с двумя более тяжелыми телами и «клюет» в обоих направлениях, что почти никогда не приводит к одновременному выполнению ограничений обоих суставов.
Один из способов избежать этого состоит в том, чтобы убедиться, что этот порядок клевывания идет только в одну сторону, например. туловище вашего двуногого - самое тяжелое тело, и все связанные тела становятся светлее по мере удаления от туловища. Это работает до тех пор, пока он не схватит что-то более тяжелое, чем тело, на конце своей руки, и в этот момент порядок клевания становится противоречивым.
Полагаю, вы пытаетесь заставить двуногого схватить что-нибудь тяжелое и потянуть, но не растянуть? Вы можете сделать это, соединяя тяжелые вещи вместе с помощью веревочного соединения, которое устанавливает максимальное расстояние, на которое две точки могут быть разнесены. Например, если он оказывается в какой-то ужасной ситуации, например, когда он висит одной рукой на краю обрыва, а его любимый слон, висящий под ним, схвачен другой рукой, вы можете соединить скалу и слона вместе с помощью веревочного соединения. до максимального расстояния между его руками. Это позволило бы ему казаться суперсильным (что он должен был бы даже попытаться сделать в первую очередь), потому что приказ клевания идет прямо со скалы к слону и полностью пропускает его.