2013-02-24 26 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); 

上面的代码创建一个静态和动态物体,然后用一个旋转连接将它们连接起来。下面是我得到:是否可以将身体从两侧连接到不同的静态物体

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

加入圈子后,我动不了了吧。它是固定的。但我希望它能加入这个圈子。我试图将锚点更改为不同的位置,但它没有帮助。我错过了什么?也许不可能将动态主体连接到多个静态主体。

回答

1

从Box2D的手册:

所有接头连接两个不同的机构之间。 一个身体可能是静态的。

您可以手动移动静态物体,但你要小心,这样你就不会压扁两个或多个静态物体

之间的动态物体是什么你有效地在这里做的南瓜棒体两个带有旋转关节的静态物体之间。静态物体不能移动,所有,所以你看到的输出实际上是有道理的。第一个旋转接头(连接盒和连杆)允许杆的远端移动(旋转)。然而,当这个远端通过另一个关节连接到另一个静止体时,它限制了所有的运动而不是旋转,它不能再移动了。因此,在连接两个不同的静态物体之后,您的酒吧身体的旋转将会变得固定。

我通过box2d代码搜索,没有找到任何东西,直接设置通过关节连接的身体的旋转。

你想做什么?似乎你可能会试图让球沿着杆的端部移动,在这种情况下,我会建议让球成为一个动态的球体(这样它可以移动)。另外,根据你在做什么,焊接接头可能更合适。

相关问题