我有一个我认为是直截了当的 box2d 配置,由一个静态身体上的 box2d 手臂(上臂、前臂和手)组成,其中手臂通过旋转关节连接到身体。目的是将手臂向后拉,以便在手臂向前移动时(即腋下投掷)可以释放手中的物体。我启用了一个电机来帮助手臂进行腋下运动。
问题是我无法提出参数值来实现不会超过我在手臂上启用的限制的真实手臂速度。如果我将 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。降低这些密度将使手臂移动得更快,但它又一次突破了极限。
关于我做错了什么的任何想法?我怎样才能让手臂更快地移动而不会超出限制?