У меня есть то, что я думаю, это прямая форменная коробка box2d, состоящая из рычага box2d (плечо, предплечье и рука) на статическом корпусе, где рука соединена с телом с революционный сустав. Цель состоит в том, чтобы вытащить руку назад, чтобы объект в руке мог быть освобожден, когда рука движется вперед (т. Е. Бросок подмышкой). Я включил двигатель, чтобы помочь рычагу в движении подмышек.box2d revolute joint motorSpeed настройка не оказывает никакого эффекта
Проблема в том, что я не могу придумать значения параметров, которые позволяют реализовать реалистичную скорость рукоятки, которая не пробивает пределы, которые я разрешил на руке. Если я устанавливаю maxMotorTorque на небольшое значение (например, любое число меньше 3,0), рычаг вращается против часовой стрелки и не останавливается в установленных пределах. Если я установил скорость двигателя на что-либо в диапазоне от 5,0 до 15000,0 радианов в секунду, скорость руки не изменится, если для параметра maxMotorTorque установлено значение 4.0. Если я уменьшу maxMotorTorque до небольшого значения, тогда рука будет летать, но снова она пробивает границы.
Ниже приведен код, я использую для инициализации Вращательного сочленения:
// Create a Revolute Joint at the shoulder
b2RevoluteJointDef revJointDef;
revJointDef.Initialize(body, upperArmBody,
upperArmBody->GetWorldPoint(b2Vec2(0, 15.0/100.0)));
revJointDef.enableLimit = true;
revJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(-45);
revJointDef.upperAngle = CC_DEGREES_TO_RADIANS(20);
revJointDef.enableMotor = true;
revJointDef.motorSpeed = 15000.0;
revJointDef.maxMotorTorque = 4.0;
shoulderJoint = (b2RevoluteJoint*)world->CreateJoint(&revJointDef);
Плотности рычага 0,5 и плотность объекта в руке составляет 1,0. Уменьшение этих плотностей позволит движению руки двигаться быстрее, но снова ударяет мимо пределов.
Любые идеи о том, что я делаю неправильно? Как я могу заставить руку двигаться быстрее, не пропуская пределов?
Я сомневаюсь, что вы можете сделать это с постоянной скоростью двигателя. Попробуйте настроить скорость в зависимости от того, насколько близко рука/рука к месту назначения. – iforce2d