我想用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);
任何想法......
由于
答案 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);
现在,正确创建了关节。 还有一个问题......因为我试图实现弹簧效果,我试着在第二个身体的中间设置锚点,但我没有成功。
任何想法..
由于