1

box2d/libgdx を使用して静的ボディと動的ボディを接続して振り子を作成しようとしています。ディスタンス ジョイント、ロープ ジョイント、リボリュート ジョイントなど、さまざまなタイプのジョイントを試しましたが、重力下では、最初にジョイントによって拘束された後、動的ボディは常に下に逃げてしまいます。無重力状態でのみ関節が正常に機能します。私は本当にばかげたことをしているに違いないことを知っています。

       world.getBodies(p);
       DistanceJointDef djd=new DistanceJointDef();
       djd.bodyA=p.get(0);
        djd.bodyB=p.get(1);
        djd.localAnchorA.set(0,0);
        djd.localAnchorB.set(0,0);
        djd.collideConnected=true;
               DistanceJoint pend=(DistanceJoint)world.createJoint(djd);   
        pend.setLength(50);

PS。連絡先リスナーをまだ実装する必要があります。これを行う方法がわかりません。衝突リスナを設置すると役に立ちますか?

4

2 に答える 2

1

私はあなたの正確なコードを試しましたが、うまくいきます。完全なテストは次のとおりです: @
user3312130: 密度がゼロでも機能します。

少なくとも 1 回の速度反復でワールドをステップするようにしてください。ゼロを使​​ったら、関節がゆっくり伸びました。

ContactListener はこれとはまったく関係がなく、役に立ちません。

もう 1 つ: DistanceJoint の長さを 50 メートルに設定します。結構な距離ですね。Box2D は、1x1 メートル オブジェクト用に最適化されています。それはまだ動作し、私はそれをテストしましたが、おそらくもっと小さなオブジェクトと小さなカメラ ビューポートを使用する必要があります。

于 2014-03-09T06:12:04.303 に答える
0

私があなたの質問を正しく理解できれば、適用したジョイントの種類に関係なく、あなたの移動体は落下します。これが発生する理由の 1 つは、アンカーと振り子の両方をダイナミック ボディとして定義し、両方が重力によって同じように落下する可能性があるためです。

アンカー ボディをまだレンダリングしていないと仮定しているため、アンカー ボディが落下することはありません。

于 2014-03-09T12:59:48.387 に答える