我认为是一个直接的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。减少这些密度将使手臂移动得更快,但它再次超过极限。
关于我做错的任何想法?如何在不超出极限的情况下让手臂移动得更快?
答案 0 :(得分:0)
当自动失败时,是时候全力以赴了。可能有灵魂: