2014-01-18 6 views
1

나는 연속적으로 진동하는 "진자"가있는 장면을 만들고 싶습니다. 더 선명하게 이미지를 업로드했습니다. 그래서 Box2D 조인트를 사용하려고합니다. 예 :Box2D : 로프 진자

RevoluteJointDef revDef = new RevoluteJointDef(); 
    revDef.initialize(ball, box, ball.getWorldCenter()); 
    revDef.lowerAngle = 0 * MathUtils.degreesToRadians; 
    revDef.upperAngle = 180 * MathUtils.degreesToRadians; 
    revDef.enableLimit = true; 
    revDef.maxMotorTorque = 10.0f; 
    revDef.motorSpeed = 2.0f; 
    revDef.enableMotor = true; 

    revoluteJoint = (RevoluteJoint)world.createJoint(revDef); 

그러나 작동하지 않습니다. 내가 주석 라인과 모터 라인을 언급하면이 라인들의 주석이 풀릴 때 얻을 수있는 것과 같은 결과를 얻을 수 있습니다. 모터가 활성화되었지만 작동하지 않는 것처럼 보입니다.

P. 사용자가 버튼을 눌러 상자를 해제하면 모터가 멈춰야합니다. 그래서 상자는 중력 때문에 땅에 떨어집니다.

나를 도와 줄 사람이 있습니까? 감사합니다.

Scene image

+0

또한 [FloatSpring]을 사용하여 [예제] (http://stackoverflow.com/a/11233735/230513)를 참조하십시오. – trashgod

답변

1

난 당신이 이것에 대한 리볼 관절,하지만 로프 공동 (b2RopeJoint)가 필요합니다 생각하지 않습니다. 회전 조인트는 두 객체를 단일 점을 중심으로 회전시킵니다. 로프 조인트는 진자처럼 다른 것으로부터 하나의 스윙을 유지합니다.

정체에 단일 로프 조인트로 진자를 부착해야합니다. 그런 다음 로프 관절을 잘라 내고 싶을 때 줄을 자르십시오. 중력이 켜져 있고 지체하는 힘이 없다면, 진자는 무기한으로 (또는 숫자에 따라 실제로 오랜 시간 동안) 계속되어야합니다.

Take a look at this post 방금 ​​이렇게 처리되었습니다. 이 코드는 github here에도 게시됩니다. 이 경우, 몸을 구속하기 위해 두 개의 추가 로프 조인트가 추가되어 초기 스윙의 끝을 넘어 이동할 수 없습니다. 나는 당신이 그것들을 필요로한다고 생각하지 않는다.

자신을, 같은 것을 사용하는 진자 만들려면 :

// Calculate the local position of the 
    // top of screen in the local space 
    // of the ground box. 
    CCSize scrSize = CCDirector::sharedDirector()->getWinSize(); 
    b2Vec2 groundWorldPos = b2Vec2((scrSize.width/2)/PTM_RATIO,(scrSize.height)/PTM_RATIO); 
    b2Vec2 groundLocalPos = m_pGround->GetLocalPoint(groundWorldPos); 

    // Now create the main swinging joint. 
    b2RopeJointDef jointDef; 
    jointDef.bodyA = m_pGround; 
    jointDef.bodyB = body; 
    jointDef.localAnchorA = groundLocalPos; 
    jointDef.localAnchorB = b2Vec2(0.0f,0.0f); 
    jointDef.maxLength = (groundWorldPos-body->GetWorldCenter()).Length(); 
    jointDef.collideConnected = true; 
    world->CreateJoint(&jointDef); 

참고이 C에 ++ (libgdx에 대한)이 아닌 자바,하지만 접근 방식은 소리를해야하고 방금 매핑해야합니다 "->"를 "." 필요한 경우.

enter image description here

이 도움이 되었습니까 : 내 예에서

, 그것은 (다른 게시 대답에서 해방 이미지)이처럼 보이는 결국?

+0

고마워요 @FuzzyBunnySlippers! jBox2D에서 작업하는 것은 2 일 째 ... "확신"을 가져야합니다. – fpellegrino

+1

@fpellegrino 행운을 빈다. 내 사이트 (http://www.nlideas.com)의 다른 게시물을 자유롭게 살펴보십시오. 또한 iForce2d 사이트 (https://www.iforce2d.net/b2dtut/)에서 많은 유용한 자습서가 있습니다. – FuzzyBunnySlippers

+0

내 게임 플레이에서 로프 조인트를 어떻게 그릴 수 있습니까? 분명히, DebugRender를 제거하면 로프와 다른 바디 모델이 숨겨집니다. 그래서 게임의 일부 요소는 이미지 (스프라이트)를 사용하지만 밧줄은 사용합니까? 스프라이트는 조인트의 위치와 경사가 같아야합니다 ... – fpellegrino