2014-01-22 64 views
4

我真的被困在這個上我可以成功檢測到碰撞,但是我不能讓碰撞中的兩個物體粘在一起。如何在碰撞後使兩個物體粘在一起?

這裏是我的ContactListener

world.setContactListener(listener); 

    listener = new ContactListener() { 

     @Override 
     public void preSolve(Contact contact, Manifold oldManifold) { 

     } 


     @Override 
     public void postSolve(Contact contact, ContactImpulse impulse) { 

     } 

     //called when two fixtures cease to touch 
     @Override 
     public void endContact(Contact contact) { 
      Fixture fixtureA = contact.getFixtureA(); 
      Fixture fixtureB = contact.getFixtureB(); 
      Gdx.app.log("beginContact", "between" + fixtureA.toString() + "and" + fixtureB.toString()); 
     } 

     //called when two fixtures begin to touch 
     @Override 
     public void beginContact(Contact contact) { 
      Fixture fixtureA = contact.getFixtureA(); 
      Fixture fixtureB = contact.getFixtureB(); 
      Gdx.app.log("beginContact", "between" + fixtureA.toString() + "and" + fixtureB.toString()); 
     } 
    }; 

而且這是我把我的渲染()的world.step()行

int numContacts = world.getContactCount(); 

    if(numContacts > 0) 
    { 
     Gdx.app.log("contact", "start of contact list"); 
     for(Contact contact: world.getContactList()) 
     { 
      Fixture fixtureA = contact.getFixtureA(); 
      Fixture fixtureB = contact.getFixtureB(); 
      Gdx.app.log("contact", "between" + fixtureA.toString() + "and" + fixtureB.toString()); 
     } 
     Gdx.app.log("contact", "end of contact list"); 
    } 

我什麼非常卡住後直要把解決後的問題或解決方法真的搞糊塗了。我遵循iforce2d粘彈丸http://www.iforce2d.net/b2dtut/sticky-projectiles,但我不明白C++,並且在eclipse中工作時出現很多語法錯誤。請有人給我看一個工作碰撞的例子代碼,在java中碰撞後,屍體粘在一起。

回答

5

這是你如何創建一個WeldJoint與libgdx包裝:

WeldJointDef wd = new WeldJointDef(); 
wd.bodyA = body1; 
wd.bodyB = body2; 
wd.referenceAngle = wd.bodyB.getAngle() - wd.bodyA.getAngle(); 
world.createJoint(wd); 

不要試圖創建ContactListener內部接頭。將要粘貼的物體添加到列表中,並在world.step之後檢查它們。

編輯:

好,像iforce2d tutorial,創建一個對象包含2個機構:

public class StickyInfo{ 
    Body bodyA; 
    Body bodyB; 
    public StickyInfo(Body bodyA, Body bodyB){ 
     this.bodyA = bodyA; 
     this.bodyB = bodyB; 
    } 
}; 

然後創建StickyInfo的

Array<StickyInfo> collisionsToMakeSticky = new Array<StickyInfo>(); 

當機構的libgdx Array碰撞(好吧,技術上他們的裝置),將它們添加到此列表中:

collisionsToMakeSticky.add(new StickyInfo(body1, body2)) 

然後就在world.step之後,如果數組不爲空。創建WeldJoints:

while(collisionsToMakeSticky.size>0){ 
    StickyInfo si = collisionsToMakeSticky.removeIndex(0); 
    //Make the WeldJoint with the bodies si.bodyA and si.bodyB 
} 
+0

你能幫我在這我已經一個多星期的努力,我仍然遠不及它,我知道浩做weldjoint但我不知道你是什麼意思通過將要粘貼的物體添加到列表中並檢查它們。 – user3197976

+0

編輯我的回答@ user3197976 – Lestat

+0

非常感謝你這讓我更有意義現在生病嘗試這個,讓我知道如果我遇到問題,但非常感謝你。 – user3197976