2014-01-22 3 views
4

나는 정말로 이것에 붙어있어 성공적으로 충돌을 감지 할 수 있지만 충돌에 관련된 두 몸체를 고수 할 수는 없습니다. 여기충돌 후 두 개의 시체를 만드는 법?

또한 이것이 내가 바로 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"); 
    } 

내가 무엇에 매우 붙어 후) (내 렌더링에 넣어 것입니다 내 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()); 
     } 
    }; 

입니다 게시물을 해결하거나 사전에 정말 혼란을 풀다. iforce2d sticky projectiles http://www.iforce2d.net/b2dtut/sticky-projectiles을 따라 갔지만 C++을 이해하지 못하고 Eclipse에서 작업 할 때 많은 구문 오류가 발생합니다. 제발 누군가가 제발 자바에서 충돌 후 시체가 함께 막대기 작업 충돌의 예제 코드를 보여줄 수 있습니다.

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

가 ContactListener 내부 커넥터를 만들려고하지 마십시오

답변

5

이 당신이 libgdx 래퍼와 WeldJoint을 만드는 방법이다. 붙이려는 바디를리스트에 추가하고 world.step 바로 뒤에 체크하십시오.

편집 :

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 만들기 : iforce2d tutorial에,이 개기구를 포함하는 객체를 생성처럼

확인 충돌 (잘 기술적으로 그들의 비품),이 목록에 추가 :

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