我做绳子的事实。使用b2RopeJoint。但它没有DampingRatio,例如在b2DistanceJoint。我怎样才能为我的绳子添加小阻尼。请帮忙)) 我创造绳索:
void GameScene::createRope(b2Body *bodyA, b2Body *bodyB, b2Vec2 anchorA, b2Vec2 anchorB, float sag)
{
b2RopeJointDef jd;
jd.bodyA = bodyA;
jd.bodyB = bodyB;
jd.localAnchorA = anchorA;
jd.localAnchorB = anchorB;
jd.collideConnected = true;
// Max length of joint = current distance between bodies * sag
float32 ropeLength = (bodyA->GetWorldPoint(anchorA)- bodyB->GetWorldPoint(anchorB)).Length()*sag;
jd.maxLength = ropeLength;
// Create joint
b2RopeJoint* ropeJoint=(b2RopeJoint*) world->CreateJoint(&jd);
VRope *newRope = new VRope(ropeJoint, _ropeSpriteSheet);
_ropes.push_back(newRope);
}
答案 0 :(得分:2)
对于绳子的阻尼,你的意思并不是很清楚,但我认为你希望绳子看起来有点有弹性。
您可以使用距离关节和绳索关节的组合。如果你使距离接头比绳索接头短一点,那么当绳子接近完全伸展时,它会倾向于使牵引物体减慢一点,并将其返回到比绳索接头极限更近的“休息”位置。您还需要检查关节锚是否比距离关节的长度更近,如果是,则将距离关节的阻尼设置为零,以防止它将连接体推开。
例如,假设绳索的自然长度应为1,但是当它被重物拉动时,你想让它伸展到1.1。在这种情况下,距离接头的长度为1,并且绳索接头的长度为1.1
要检查距离关节阻尼何时应设置为零,您可以执行以下操作:
//b2DistanceJoint dj;
float distBetweenAnchors = ( dj.getAnchorA() - dj.getAnchorB() ).Length();
if ( distBetweenAnchors < dj.GetLength() )
dj.SetDampingRatio( 0 );
else
dj.SetDampingRatio( NORMALDAMPING );