2

私は libgdx をとても気に入っています。しかし、私は box2d の初心者なので、私より賢い誰かが助けてくれることを期待していました。

静的な正方形のタイルの束が床を構成し、動的なボディ (円) が跳ね回る単純なテスト画面があります。

私がやろうとしているのは、ボールがあまり転がらないように床の摩擦を増やすことです. 床が木の代わりに草だったように。

オンラインでいくつかのものを見つけましたが、どちらも機能していないようです。私が試した最も有望なことはこれです:

tileBody.getFixtureList().get(0).setFriction(0.9f);

それでも何もしないようです。

box2d のドキュメントを読むと、最初にオブジェクトを定義するときにフィクスチャ定義に摩擦を設定する必要があることが示唆されています。

FixtureDef fdef = new FixtureDef();
fdef.shape = wallshape;
fdef.density = 1.0f;
fdef.friction = 0.9f;

ただし、これもボールの転がりをあまり止めていないようです。

これを行うより良い方法はありますか?跳ね返りを減らすことはできますが、それだけでは跳ね返らなくなりますよね?

4

3 に答える 3

2
    Body groundBody = world.createBody(groundBodyDef);  
    PolygonShape groundshape = new PolygonShape();  
    groundshape.setAsBox(30, 1.0f);   
    FixtureDef groundFixture = new FixtureDef();
    groundFixture.density=0.0f;
    groundFixture.shape = groundshape;
    groundFixture.restitution = .5f;
    groundFixture.friction=0f;
    groundBody.createFixture(groundFixture);
    groundshape.dispose();

これは私にとってはうまくいきました。地面に沿って動くものに摩擦があり、暗黒物質でできていなければ、減速するはずです。

于 2013-12-03T01:38:03.453 に答える
1

現在触れているものに応じて、円体の角度減衰を変更したいようです。角度減衰はボディの回転を抑制しますが、直線運動には影響しません。body->SetAngularDamping( aHighValueLikeSay2to5 ) を実行して、どのような効果が得られるかを確認することで、これが必要かどうかを確認できます。

それが良さそうに見える場合は、角度減衰を変更する必要がある何かに円がいつ接触するかを追跡する必要があります。これを行うには、BeginContact 通知と EndContact 通知を提供する連絡先リスナーを使用します。BeginContact イベントを取得したときに、接触がサークルとローリングに影響する何かとの間にある場合は、カウンターを 1 つ増やします。EndContact で同じチェックを行い、カウンターを減らします。これにより、角度減衰を変更する必要があるかどうかを確認するためにいつでも確認できる値が得られます。

于 2012-06-25T05:29:39.377 に答える
0

cocos2d フォーラムで 1 つの回答を見つけました。

http://www.cocos2d-iphone.org/forum/topic/17762

円の形状は、box2d の摩擦の影響を受けないようです。

したがって、円に摩擦を適切に適用するには、円を多角形で近似するのが最適です。

于 2012-06-26T18:31:19.743 に答える