2013-03-15 24 views
1

我試圖製造具有它在libGDX低端一些對象掛繩, 繩應該像hanging rope in Box2DlibGDX:掛繩一些樞結

我已經做了很多的研究,libGDX有其ropeJoint方法,但如何使用它來製作繩子?

請幫忙,這將是一個很大的忙。

+0

繩索連接不是繩索的物理表示。這是繩索式的約束,強制最大距離。那不是你在尋找什麼 – kassak 2013-03-15 12:15:42

+0

@kassak比我應該怎麼做一根吊繩,你能幫忙嗎? – 2013-03-15 12:39:32

+0

與您的鏈接一樣,您應該創建一組矩形,並使用簡單的旋轉關節進行連接。我沒有看到關於該主題的教程,使用libGDX。 – kassak 2013-03-15 12:47:31

回答

0

我已經開始與回答類似的問題 libGDX: Hanging Rope

,並添加一些代碼給它添加一些缺碼和修復錨一些問題,我認爲下面的代碼是一個合適的目標問題:

BodyDef ropeStartDef = new BodyDef(); 
    int EACH_RING_DISTANCE = 10 
    ropeStartDef.type = BodyType.StaticBody; 
    ropeStartDef.position.set(m_camera.viewportWidth/2,m_camera.viewportHeight); 
    Body ropStartBody = m_world.createBody(ropeStartDef); 
    PolygonShape ropeStartShape = new PolygonShape(); 
    ropeStartShape.setAsBox(5, 5); 
    ropStartBody.createFixture(ropeStartShape, 0); 
    ropeStartShape.dispose(); 
    //---------------------------- 
    RevoluteJointDef jd = new RevoluteJointDef(); 
    Body prevBody = ropStartBody; 
    int angle = -90; 
    Vector2 position = ropeStartDef.position; 
    BodyDef previousbodyDefinition= ropeStartDef; 
    for(int i=0; i<5; i++) 
     { 
      BodyDef bd = new BodyDef(); 
      bd.type = BodyType.DynamicBody; 
      bd.angle = angle-MathUtils.PI/2; 
      bd.position.set(position.x + i*MathUtils.cos(angle)*EACH_RING_DISTANCE, 
          position.y + i*MathUtils.sin(angle)*EACH_RING_DISTANCE); 
      Body body = m_world.createBody(bd); 
      FixtureDef eachRingFD; 
      eachRingFD = new FixtureDef(); 
      CircleShape chainCircleshape =new CircleShape(); 
      chainCircleshape.setRadius(4); 
      eachRingFD.density = 2; 
      eachRingFD.shape =chainCircleshape; 
      body.createFixture(eachRingFD); 

      Vector2 anchor = new Vector2(bd.position.x - MathUtils.cos(angle)*EACH_RING_DISTANCE/2f, 
             bd.position.y - MathUtils.sin(angle)*EACH_RING_DISTANCE/2f); 
      jd.initialize(prevBody, body, anchor); 
      //-----------------------added based on http://www.emanueleferonato.com/2009/10/05/basic-box2d-rope/ 
       RevoluteJointDef joint = new RevoluteJointDef(); 
       joint.initialize(prevBody, body, anchor); 
       m_world.createJoint(joint); 

      //------------------------end of added 
      prevBody = body; 
      previousbodyDefinition = bd; 
     }