2016-07-05 54 views
0

我创建与下面的代码了一系列的Box2D机构的绳索:Box2D的LibGDX绳问题

public void create(float length, float ropeLength){ 
    Array<Body> bodies = new Array<Body>(); 
    bodies.add(BodyFactory.createBox(world, position.x, position.y, length, length, BodyType.StaticBody, 0, 0, 0, "RopeMain")); 

    for(int i = 1; i < ropeLength; i++){ 
     bodies.add(BodyFactory.createBox(world, position.x, position.y - (((length/2)/Core.PPM) * i), 
       length, length, BodyType.DynamicBody, 0, 0, 0, "RopeBody" + i)); 

     RopeJointDef rDef = new RopeJointDef(); 
     rDef.bodyA = bodies.get(i - 1); 
     rDef.bodyB = bodies.get(i); 
     rDef.collideConnected = true; 
     rDef.maxLength = (length/2)/Core.PPM; 
     rDef.localAnchorA.set(position.x, -((length/2)/Core.PPM)); 
     rDef.localAnchorB.set(position.x, ((length/2)/Core.PPM)); 
     world.createJoint(rDef); 
    } 
} 

允许我分享一些参数...

对于BodyFactory.createBox它需要以下条件:

世界,XPOS,yPos,宽度,高度的BodyType,密度,摩擦,恢复原状,夹具的用户数据。(长度是相同的,因为它使用框)

Core.PPM是每米像素。另请注意,该位置在构造函数中被PPM分割。

问题:为什么下面的行拍到右边?

enter image description here

任何信息是非常有帮助的,也将如何密度,摩擦和恢复影响的绳子?谢谢!

回答

1

联合的localAnchor是相对的到身体的中心并不是绝对值。这意味着,如果你想联合设置的bodyA中心底部中心顶部bodyB你需要使用

rDef.localAnchorA.set(0, -((length/2)/Core.PPM)); 
    rDef.localAnchorB.set(0, ((length/2)/Core.PPM)); 
+0

绝对的感谢! – Luke