我想使用 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);
Run Code Online (Sandbox Code Playgroud)
任何的想法...
谢谢
你是对的,距离接头可以用作弹簧。这是在 Box2D 手册中说的:
距离接头也可以做得很软,就像弹簧阻尼器连接一样。请参阅测试台中的 Web 示例以了解其行为方式。
柔软度是通过调整定义中的两个常数来实现的:频率和阻尼比。将频率视为谐波振荡器(如吉他弦)的频率。频率以赫兹为单位指定。通常,频率应小于时间步长频率的一半。所以如果你使用60Hz的时间步长,距离关节的频率应该小于30Hz。原因与奈奎斯特频率有关。
阻尼比是无量纲的,通常介于 0 和 1 之间,但也可以更大。为 1 时,阻尼至关重要(所有振荡都应消失)。
Run Code Online (Sandbox Code Playgroud)jointDef.frequencyHz = 4.0f; jointDef.dampingRatio = 0.5f;