2013-02-07 1 views
4

box2djs를 사용하여 스프링 효과를 시뮬레이트하고 싶습니다. 많은 검색을 한 후에 그 거리 조인트를 사용할 수 있다고 생각합니다 (확실하지 않습니다). 다음 코드를 시도했지만 몸체 사이에 어떤 관절도 보지 않았습니다.spring2djs의 스프링 효과

distance_joint = new b2DistanceJointDef(); 

distance_joint.body1 = Body1; 

distance_joint.body2 = Body2; 

distance_joint.localAnchorA = new b2Vec2(0, 0); 

distance_joint.localAnchorB = new b2Vec2(0, 0); 

distance_joint.length = 3; 

distance_joint.collideConnected = true; 

return world.CreateJoint(distance_joint); 

어떤 생각 ...

감사

답변

3

당신이 옳다는 거리 조인트 스프링로 사용할 수 있습니다. 이것은 Box2D 매뉴얼에 나와 있습니다.

거리 조인트는 스프링 댐퍼 연결처럼 부드럽게 만들 수 있습니다. 테스트 베드의 웹 예제가 어떻게 작동하는지보십시오.

부드러움은 주파수 및 감쇠 비율의 정의에서 두 개의 상수를 조정하여 얻을 수 있습니다. 주파수를 고조파 발진기의 주파수 (기타 줄과 같은)라고 생각하십시오. 주파수는 Hertz로 지정됩니다. 일반적으로 주파수는 시간 단계의 주파수의 절반보다 작아야합니다. 따라서 60Hz 시간 간격을 사용하는 경우 거리 조인트의 주파수는 30Hz 미만이어야합니다. 그 이유는 나이 퀴 스트 주파수와 관련이 있습니다.

감쇠비는 무차 원이며 일반적으로 0과 1 사이이지만 더 클 수 있습니다. 1에서 댐핑은 중요합니다 (모든 진동은 사라져야합니다).

jointDef.frequencyHz = 4.0f; 
jointDef.dampingRatio = 0.5f; 
+0

감사, 문제의 이제 두 번째 부분은 두 물체 사이에 형성에는 어떤 거리 관절이없는 이유는 ... ... 코드에서 어떤 문제가 .. 게임 '); ... refernce를위한 – Rajesh

+0

이 내 주요 기능 - necesssary 경우 .I은>' 캔버스 = document.getElementById를 ($ (함수() { 세계 = createWorld를(); 더 많은 코드를 게시 할 수 을 ctx = canvas.getContext ('2d'); canvas_width = parseInt (canvas.width); canvas_height = parseInt (캔버스.신장); createGround (canvas_width/2, canvas_height - iBorder, canvas_width/2, iBorder, 0); Body1 = CreateObject1(); Body2 = CreateObject2(); \t \t CreateJoint(); $ (캔버스) .mousedown (함수() { \t \t ChangePosition(); }); \t \t frame(); }); ' – Rajesh

+0

CreateJoint 메서드를 반환하는 내용을 알려주십시오. – Pavel

0

는 CreateJoint는 b2Joint (만든 공동)을 반환하지만 그게 내가 문제를 발견 문제 ... 없습니다. 사실 내가

distance_joint.localAnchorA = new b2Vec2(0, 0);

distance_joint.localAnchorB = new b2Vec2(0, 0);

으로 지역의 기준점을 설정 한 것은 오히려 내가 지금

distance_joint.anchorPoint1.Set(0.0, 0.0);

distance_joint.anchorPoint2.Set(0.0, 0.0);

처럼 세계에서 앵커 포인트를 생성한다 조인트 올바르게 작성되었습니다. 한 번 더 문제가 ... 나는 봄 효과를 구현하려고하기 때문에 나는 몸 안쪽에 앵커 포인트를 설정하려고 시도하지만 성공을 얻지는 못한다.

어떤 생각 ..

감사