2013-02-24 1 views
2
b2Body* foundation =[self createStaticBodyAtLocation:CGPointMake(15, 15) withSize:CGSizeMake(35, 35)]; 
    b2Body* beam=[self createDynamicBodyAtLocation:CGPointMake(105, 35) withSize:CGSizeMake(150, 10)]; 
    b2RevoluteJointDef revoluteJointDef; 
    revoluteJointDef.Initialize(foundation, beam, b2Vec2(30.0/PTM_RATIO,30.0/PTM_RATIO)); 
    _world->CreateJoint(&revoluteJointDef); 

위 코드는 정적 바디와 동적 바디를 만든 다음 revolutejoint와 조인합니다. 여기에 내가 무엇을 얻을 : 두 개의면을 다른 정적 바디에 결합 할 수 있습니까?

Before adding the second static body

가 그럼 난 정적 원 또 다른 몸을 추가 한 다음 원과 바의 다른 쪽 끝에있는 이전에 추가 한 줄에 가입 다음 줄을 추가합니다.

b2Body *jointBall=[self createCircleAtLocation:CGPointMake(160, 135)]; 
    revoluteJointDef.Initialize(jointBall, beam, b2Vec2(100.0/PTM_RATIO,10.0/PTM_RATIO)); 
    _world->CreateJoint(&revoluteJointDef); 

하지만, 여기에 내가 무엇을 얻을 :

After adding the second static body

원을 추가 한 후, 나는 줄을 이동할 수 없습니다. 고쳐졌습니다. 그러나 나는 그것이 원에 가입 할 것으로 기대합니다. 앵커 포인트를 다른 위치로 변경하려고 시도했지만 도움이되지 않습니다. 내가 뭘 놓치고 있니? 아마도 하나 이상의 정적 시체에 동적 본문을 결합 할 수 없습니다. Box2D의 수동에서

답변

1

:

모든 관절은 두 개의 서로 다른 기관 사이에 연결된다. 하나의 몸체가 움직이지 않을 수 있습니다. 당신이 효과적으로 여기했던 것은 스쿼시 바 바디

수동으로 정적 몸을 움직일 수 있지만, 두 개 이상의 정적 기관

사이에 동적 몸을 납작하게하지 않도록 조심해야한다입니다 회전 조인트가있는 두 개의 정지 시체 사이. 정적 바디는 을 모두으로 이동할 수 없으므로 출력 결과가 실제로 의미가 있습니다. 첫 번째 회전 조인트 (연결 상자 및 막대)를 사용하면 막대의 맨 끝을 움직일 수 있습니다 (회전 가능). 그러나이 원단이 모든 동작을 제한하는 다른 관절에 의해 다른 정적 인 바디에 연결되지만 회전은 더 이상 움직일 수 없습니다. 따라서, 바 바디의 회전은 두 개의 다른 정적 바디와 결합한 후에 고정 될 것입니다.

나는 box2d 코드를 통해 검색했으며 조인트를 통해 연결된 몸체의 회전을 직접 설정하는 것을 찾지 못했습니다.

무엇을하려하십니까? 바가 끝날 때 공이 움직 이도록하려는 것 같습니다.이 경우 공을 역동적 인 몸으로 만드는 것이 좋습니다 (움직일 수 있도록). 또한 작업 내용에 따라 용접 접합이 더 적절할 수 있습니다.

관련 문제