4

box2djsを使ってスプリング効果をシミュレートしたい。多くの検索の後、そのdistancejointを使用できることがわかりました(わかりません)。次のコードを試しましたが、体の間に関節がありません。

 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); 

何か案が...

ありがとう

4

2 に答える 2

5

そうです、ディスタンスジョイントはスプリングとして使用できます。これは Box2D マニュアルに記載されています。

スプリングとダンパーの接続のように、ディスタンス ジョイントをソフトにすることもできます。これがどのように動作するかを確認するには、テストベッドの Web の例を参照してください。

柔らかさは、定義内の 2 つの定数 (周波数と減衰比) を調整することによって実現されます。周波数は、調和振動子 (ギターの弦など) の周波数と考えてください。周波数はヘルツで指定されます。通常、周波数は時間ステップの周波数の半分未満にする必要があります。したがって、60Hz のタイム ステップを使用している場合、ディスタンス ジョイントの周波数は 30Hz 未満である必要があります。その理由は、ナイキスト周波数に関連しています。

減衰比は無次元で、通常は 0 から 1 の間ですが、それより大きくなる場合もあります。1 の場合、ダンピングは重要です (すべての振動が消失するはずです)。

jointDef.frequencyHz = 4.0f;
jointDef.dampingRatio = 0.5f;
于 2013-02-07T08:28:56.630 に答える
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);

これで、ジョイントが正しく作成されました。もう1つの問題...スプリング効果を実装しようとしているので、アンカーポイントをセコンドボディの真ん中に設定しようとしていますが、成功していません.

何か案が..

ありがとう

于 2013-02-08T05:24:02.120 に答える