2014-03-06 3 views
1

정적 바디와 동적 바디를 연결하여 box2d/libgdx를 사용하여 진자를 만들려고합니다. 나는 거리 조인트, 로프 조인트 및 회전 조인트와 같은 다양한 유형의 조인트를 시도했지만 중력 하에서는 초기에 조인트에 의해 구속 된 후 역동적 인 몸체가 항상 아래로 빠져 나가게됩니다. 무중력에서만 관절이 제대로 작동합니다. 나는 정말로 바보 같은 일을해야한다는 것을 안다.libgdx + box2d 접합부가 중력 하에서 제대로 작동하지 않습니다.

 world.getBodies(p); 
     DistanceJointDef djd=new DistanceJointDef(); 
     djd.bodyA=p.get(0); 
     djd.bodyB=p.get(1); 
     djd.localAnchorA.set(0,0); 
     djd.localAnchorB.set(0,0); 
     djd.collideConnected=true; 
       DistanceJoint pend=(DistanceJoint)world.createJoint(djd); 
     pend.setLength(50); 

ps. 나는 아직 접촉 ​​청취자를 구현해야한다. 나는 이것을 어떻게하는지 알아 내지 못했다. 충돌 청취자가 도움이 될까요?

+0

동적 몸체의 밀도가 0이 아닌가요? – user3312130

답변

0

정확하게 질문을하면, 적용한 조인트의 유형에 관계없이 움직이는 몸이 떨어집니다. 그것이 일어날 수있는 한 가지 이유는 앵커와 진자를 모두 동적 인 몸체로 정의했을 수 있고, 둘 다 중력 때문에 같은 방법으로 떨어지기 때문입니다.

아직 앵커 본문을 렌더링하지 않는다고 가정하므로 넘어지지 않습니다.

1

정확한 코드를 사용했는데 작동합니다. Here은 전체 테스트입니다.
@ user3312130 : 0의 밀도에서도 작동합니다.

적어도 하나의 속도 반복을 사용하여 세계를 한 바퀴 돌았는지 확인하십시오. 제로를 사용하면 조인트가 천천히 확장됩니다.

ContactListener는 실제로 이것과 아무 관계가 없으므로 도움이되지 않습니다.

또 다른 한가지 : 거리 조인트의 길이를 50m로 설정했습니다. 그것은 꽤 먼 거리입니다. Box2D는 1x1 미터 개체에 최적화되어 있습니다. 그것은 여전히 ​​작동 할 것이고 나는 그것을 테스트했지만 작은 오브젝트와 더 작은 카메라 뷰포트를 사용해야 할 것입니다.

+0

나는 당신의 코드를 시험해 보았지만 작동하지만 여전히 약간 더 복잡하지만 본질적으로 동일한 코드를 사용하여 수행 할 수없는 이유를 모르겠다. – ARK

+0

우리와 함께 더 많은 코드를 공유하면 버그를 검색 할 수있다. 이처럼 유일한 아이디어는 속도가 0 인 반복으로 세계를 한 단계 도약시킬 수 있다는 것입니다. – dermetfan