0

4つの壁の間で跳ねる円を実装しようとしました。しかし、その円の初速度ベクトルが何であるかは問題ではありません。しばらくすると、常に水平または垂直に移動することになります。それは正常な動作ですか?そうでない場合、どうすれば修正できますか?

ご回答ありがとうございます。

壁:

BodyDef bd = new BodyDef();
    Body body = w.createBody(bd);
    PolygonDef sd = new PolygonDef();
    sd.density = 0.0f;
    sd.friction = 0.01f;
    sd.restitution = 1f;

    sd.setAsBox(250, 10f, new Vec2(250, 1), 0);
    body.createShape(sd);

    sd.setAsBox(250, 10f, new Vec2(250, 499), 0.0f);
    body.createShape(sd);

    sd.setAsBox(250, 10f, new Vec2(1, 250), (float) (Math.PI / 2));
    body.createShape(sd);

    sd.setAsBox(250, 10f, new Vec2(499, 250), (float) (Math.PI / 2));
    body.createShape(sd);

// サークル :

BodyDef bd = new BodyDef();
    bd.position.set((float) (Math.random() * 400 + 50), (float) (Math.random() * 400 + 50));
    //bd.isBullet = true;
    Body body = w.createBody(bd);
    Vec2 v = new Vec2((float) (Math.random() * 20 - 10), (float) (Math.random() * 20 - 10));
    System.out.println(body + "  " + v);
    body.setLinearVelocity(v);
    body.setAngularVelocity(0.1f);

    CircleDef sd = new CircleDef();
    sd.radius = (float) (Math.random() * 40 + 5);
    sd.density = 15.0f;
    sd.restitution = 0.8f;

    body.createShape(sd);
    body.setMassFromShapes();
4

1 に答える 1

1

ボールの固定具の摩擦を 0 に設定してみてください。

私の物語:

私は同様のセットアップと問題を抱えていました(4つの壁、無重力、内部でボールが跳ねる-ただし、jBox2DではなくLibGDXの下)。何時間もの検索といじりの後、ボール フィクスチャの摩擦を 0 に設定すると、ボールが壁の中で適切にバウンド/反射することがわかりました。ゼロ以外の場合、奇数の反射角度 (予想されるように正方形/直角ではない) で数回バウンドし、水平または垂直にバウンスする定常状態で終了します。

誰かに関連する場合に備えて、私の場合の詳細情報(Googleはこれについてほとんど何も持っていませんでした!):

長い間それを見つめた後、実際には正確に水平または垂直に跳ね返っていないことにようやく気付きました。私の (確かに非常に貧弱な) 物理学の理解に基づいて、Box2D のどこかにバグがあると思います。vx *= -1f; 水平な壁に跳ね返る wlog しかし、定常状態では、vy *= -1f も実行されます。角速度は効果がなく (ボディに固定角度を設定して、刻みごとにオブジェクトに角速度ジッターを個別に追加してみました)、ボディ タイプとは何の関係もありませんでした (壁をキネマティック、静的、動的にする)すべて同じ効果が得られました)。速度しきい値を 0f とデフォルトの両方で試し、スキン半径を使用して、または使用せずに試しました。Restitution を変更すると、水平/垂直の定常状態になるまでにかかった時間に影響します。

効果が関係している可能性があります(無重力空間での反射角に影響を与える速度に関してopが主張したことに基づいて):http://www.box2d.org/forum/viewtopic.php?f=3&t=7716

于 2012-03-25T07:19:25.943 に答える