2016-07-05 66 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