2013-05-23 10 views
6

私はbox2dでlibgdxを使って私の最初のゲームに取り組んでいます。私はオブジェクトをテストするためにデバッグレンダラーを使用しています。私はオブジェクトのような車をいくつか作りました。各車は本体が6ポイント(長さ約1メートル、高さ0.7メートル)の大きな多角形で、回転ジョイントで2つの車輪が取り付けられています。Libgdx box2Dの衝突がいくつかのボディでは失敗する

メインカーには大砲と機関銃が取り付けられており、回転ジョイントを介して取り付けられています。

私が直面している問題は、車の大部分が意図したとおりに衝突していないことです。 2台の車がお互いを打つとき、彼らはこのように、重複している:

Bodies colliding

いくつかの注意:

  1. ホイールと衝突罰金をやっている大砲(小さい形状)。車輪が触れたときの体は、私は、コードを経由して衝突を検出した場合、衝突が実際に
  2. が起こっている私は小さなオブジェクト(マシンガンから発射弾丸)でこれを試みたが、私は、オブジェクトの「isBulletを設定
  3. を停止しています「私は別の記事で見たように、真のプロパティ(not proper collision in box2d)が、同じ結果を持っていた(弾丸が赤い丸で囲まれている):

Bullet object colliding

ここで私が作成するために使用しているコードです体:

protected Body createBody(Material material, Shape shape, BodyType type, WorldWrapper world) 
{ 
    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = type; 
    bodyDef.position.set(initialPosition); 

    Body body = world.createBody(bodyDef); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.density = this.material.getDensity(); 
    fixtureDef.friction = this.material.getFriction(); 
    fixtureDef.restitution = this.material.getRestitution(); 
    fixtureDef.shape = shape; 
    body.createFixture(fixtureDef); 

    return body; 
} 

車は、このように構築され、車輪の回転関節、上のモーターを使用して前方に行く:私は、次の値を使用してい

public void goForward() 
{ 
    for (RevoluteJoint joint : wheelJoints) 
    { 
     joint.enableMotor(true); 
     joint.setMotorSpeed(-this.engineSpeed); 
     joint.setMaxMotorTorque(this.engineTorque); 
    } 
} 

Density = 2500; 
Restitution = 0; 
Friction = 0.1; 
BodyType = Dynamic; 

私は1/60を使用しています秒ワールドステップ、velocityIterations = 6、positionIterations = 2

私はここで何が不足しているのでしょうか?

答えて

5

車の本体(ポリゴン)は凹型です。 Box2Dは、凹状のポリゴンまたは頂点が時計回りの順序で問題があります。 代わりに2つの長方形でそれらの車を構築してみてください。

Btw:古いバージョンのlibgdxを使用しているようです。 現在のlibgdxのナイトリーにはpolygon.set関数に追加のアルゴリズムがあります。これは、指定された頂点の反時計回りの順序で凸包を自動的に計算します。 そのバージョンを使用すると、問題が解決するはずです。

+0

ありがとう!私は今日それを試みます。 Btw私は3週間前にこのプロジェクトを作成しました。セットアップの実行ファイルにlibgdxの更新機能を使用しました。最近の変更ですか? – Charbel

+2

私はGitHubで見たものから、3月22日に変更が追加されました。最新のlibgdxリリースビルドは3月16日からのものですので、現在はナイトリーズにしかありません。 – Shinni

+0

ポリゴンを凸型に変更しましたが、それは事実上問題でした。私は2つの四角形の提案を使用します。ありがとう! – Charbel

関連する問題