2013-01-14 3 views
1

모양을 유지하려면 AndEngine과 Box2D distanceJoint를 사용하고 있습니다. 그러나 모양이 유지되지 않고 조각들이 바닥에 떨어집니다. 그것은 원형/타원형 모양을 유지하기로되어있다. 내가 뭘 잘못하고 있는지 알려주시겠습니까? 여기에서 나는 이웃과의 거리를 유지하고있다. 다른 모든 회원과 거리를 유지해야합니까?Box2D distance AndEngine에서 모양을 유지하지 않는 조인트

for (int i=1; i<nBodies; ++i) { 
     FIXTURE_DEF = PhysicsFactory.createFixtureDef(25f, 0.0f, 1f); 

     float angle = map(i, 0, nBodies, 0, 2*3.1415f); 
     float x = cx + rx * (float)Math.sin(angle); 
     float y = cy + ry * (float)Math.cos(angle); 
     // Add plate  
     float x1 = (x + 10) * 30; 
     float y1 = y * 20; 
     centers[i][0] = x1; 
     centers[i][1] = y1; 

      Vector2 v1 = new Vector2(x1,y1); 

      circle = new AnimatedSprite(x1, y1, this.mCircleFaceTextureRegion, this.getVertexBufferObjectManager()); 
      circleBody[i] = PhysicsFactory.createCircleBody(this.mPhysicsWorld, circle, BodyType.DynamicBody, FIXTURE_DEF); 
      this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(circle, circleBody[i], true, true)); 

      this.mScene.attachChild(circle); 

    } 

    for(int i= 1;i < nBodies -1; i++) { 

     Vector2 v1 = new Vector2(centers[i][0]/PIXEL_TO_METER_RATIO_DEFAULT,centers[i][1]/PIXEL_TO_METER_RATIO_DEFAULT); 
     Vector2 v2 = new Vector2(centers[i+1][0]/PIXEL_TO_METER_RATIO_DEFAULT,centers[i+1][1]/PIXEL_TO_METER_RATIO_DEFAULT); 
     Log.d("Vals","vals x:" + centers[i][0] + "y:" + centers[i][1] + "x:" +centers[i+1][0] + "y:" + centers[i+1%19][1]); 
     int j = i+1; 
     Log.d("i","i" + i + " " + j); 
     distanceJoint.initialize(circleBody[i], circleBody[(i+1)], v1, v2); 
     distanceJoint.collideConnected = true; 
     distanceJoint.dampingRatio = 10.0f; 
     distanceJoint.frequencyHz = 1.0f; 
     this.mPhysicsWorld.createJoint(distanceJoint); 
    } 

    Vector2 v1 = new Vector2(centers[1][0]/PIXEL_TO_METER_RATIO_DEFAULT,centers[1][1]/PIXEL_TO_METER_RATIO_DEFAULT); 
    Vector2 v2 = new Vector2(centers[19][0]/PIXEL_TO_METER_RATIO_DEFAULT,centers[19][1]/PIXEL_TO_METER_RATIO_DEFAULT); 
    distanceJoint.initialize(circleBody[1], circleBody[19], v1, v2); 
    distanceJoint.collideConnected = true; 
    distanceJoint.dampingRatio = 10.0f; 
    distanceJoint.frequencyHz = 1.0f; 
    this.mPhysicsWorld.createJoint(distanceJoint); 

나는 무엇이 있습니까? 저에게 알려주세요.

답변

0

나는 모든 신체 사이의 거리 조인트를 유지함으로써 그것을 해결했다고 생각합니다. Blob 데모를 http://www.jbox2d.org/에 다시 만들려고했습니다. 이 데모에서는 ConstantVolumeJoint를 사용했습니다. 나는 다음과 같이 모든 신체 사이의 거리 조인트로 이것을 재현 할 수 있었다.

for(int i= 0;i < nBodies-1; i++) { 

     for(int j=i+1; j< nBodies ; j++){ 
      Vector2 v1 = new Vector2(centers[i][0]/PIXEL_TO_METER_RATIO_DEFAULT,centers[i][1]/PIXEL_TO_METER_RATIO_DEFAULT); 
      Vector2 v2 = new Vector2(centers[j][0]/PIXEL_TO_METER_RATIO_DEFAULT,centers[j][1]/PIXEL_TO_METER_RATIO_DEFAULT); 
      Log.d("Vals","vals x:" + centers[i][0] + "y:" + centers[i][1] + "x:" +centers[j][0] + "y:" + centers[j][1]); 

      Log.d("i","i:" + i + " j:" + j); 
      distanceJoint.initialize(circleBody[i], circleBody[(j)], v1, v2); 

      distanceJoint.collideConnected = true; 
      distanceJoint.dampingRatio = 10.0f; 
      distanceJoint.frequencyHz = 0.5f; 
      this.mPhysicsWorld.createJoint(distanceJoint); 
     } 
    } 

이제 신체 사이에 연결선이 있어야한다. 그렇지 않으면 방울이 떨어지는 몸체에서 반사됩니다.

전체 모양이 움직일 때 연결을 유지하는 인접한 바디 사이에 연결선을 그리는 방법을 알려주십시오.