box2djs中的弹簧效果

时间:2013-02-07 07:59:18

标签: box2d box2dweb

我想用box2djs模拟弹簧效果。 经过大量搜索后,我认为可以使用该距离(我不确定)。 我尝试了以下代码,但我不认为身体之间有任何联合。

 distance_joint = new b2DistanceJointDef();

distance_joint.body1 = Body1;

distance_joint.body2 = Body2;

distance_joint.localAnchorA = new b2Vec2(0, 0);

distance_joint.localAnchorB = new b2Vec2(0, 0);

distance_joint.length = 3;

distance_joint.collideConnected = true;

return world.CreateJoint(distance_joint); 

任何想法......

由于

2 个答案:

答案 0 :(得分:4)

你是对的,距离关节可以用作弹簧。这在Box2D手册中有说明:

  

距离接头也可以做得柔软,就像弹簧阻尼连接一样。请参阅测试平台中的Web示例,了解其行为方式。

     

通过调整定义中的两个常数来实现柔和度:频率和阻尼比。将频率视为谐振子的频率(如吉他弦)。频率以赫兹为单位。通常,频率应小于时间步长频率的一半。因此,如果您使用的是60Hz时间步长,则距离关节的频率应小于30Hz。原因与奈奎斯特频率有关。

     

阻尼比是无量纲的并且通常在0和1之间,但可以更大。在1处,阻尼是关键的(所有振荡都应该消失)。

jointDef.frequencyHz = 4.0f;
jointDef.dampingRatio = 0.5f;

答案 1 :(得分:0)

CreateJoint返回b2Joint(创建的关节),但这不是问题... 我发现了这个问题。 实际上我正在设置本地锚点

distance_joint.localAnchorA = new b2Vec2(0, 0);

distance_joint.localAnchorB = new b2Vec2(0, 0);

而我应该在世界上创建锚点,如

distance_joint.anchorPoint1.Set(0.0, 0.0);

distance_joint.anchorPoint2.Set(0.0, 0.0);

现在,正确创建了关节。 还有一个问题......因为我试图实现弹簧效果,我试着在第二个身体的中间设置锚点,但我没有成功。

任何想法..

由于