2013-07-01 44 views
1

我們如何知道box2d汽車是否正在飛行? 這就是我如何與傳感器做,這是不行的完美:Andengine Box2D如何知道一輛車正在飛行?

public void endContact(Contact contact) { 
      // TODO Auto-generated method stub 
      final Fixture x1 = contact.getFixtureA(); 
      final Fixture x2 = contact.getFixtureB(); 

      if (x1.getBody().getUserData() != null 
        && x2.getBody().getUserData() != null) { 
       if ((x1.getBody().getUserData().equals("ground") && x2 
         .getBody().getUserData().equals("wheelSensor1")) 
         || (x1.getBody().getUserData().equals("wheelSensor1") && x2 
           .getBody().getUserData().equals("ground"))) { 
        r1 = true; 
       } 
       if ((x1.getBody().getUserData().equals("ground") && x2 
         .getBody().getUserData().equals("wheelSensor2")) 
         || (x1.getBody().getUserData().equals("wheelSensor2") && x2 
           .getBody().getUserData().equals("ground"))) { 
        r2 = true; 
       } 
       if (r1 && r2){ 
        car.isFlying = true; 
       } 
      } 
     } 

     @Override 
     public void beginContact(Contact contact) { 
      // TODO Auto-generated method stub 
      final Fixture x1 = contact.getFixtureA(); 
      final Fixture x2 = contact.getFixtureB(); 

      if (x1.getBody().getUserData() != null 
        && x2.getBody().getUserData() != null) { 
       if (x1.getBody().getUserData().equals("ground") 
         && x2.getBody().getUserData().equals("wheelSensor1")) { 
        car.isFlying = false; 
        r1 = false; 
       } else if (x1.getBody().getUserData().equals("wheelSensor1") 
         && x2.getBody().getUserData().equals("ground")) { 
        car.isFlying=false; 
        r1 = false; 
       } else if (x1.getBody().getUserData().equals("ground") 
         && x2.getBody().getUserData().equals("wheelSensor2")) { 
        car.isFlying=false; 
        r2 = false; 
       } else if (x1.getBody().getUserData().equals("wheelSensor2") 
         && x2.getBody().getUserData().equals("ground")) { 
        car.isFlying = false; 
        r2 = false; 
       } 
      } 
     } 

我的傳感器機構比車輪收到較好的效果更大。 wheelSensorPicture 但是,即使傳感器像圖中一樣埋在地下,接觸監聽器也會給我多次傳感器和接地之間的聯繫。我已經嘗試過與輪體相同的過程,結果是一樣的。那麼我的錯誤是什麼,或者更好的方法是什麼?謝謝你的幫助。

+0

什麼是由...組成的......是多個燈具還是隻有一個? – iforce2d

回答

0

試試這個:

bool isWheelTouching(b2Body* wheel) 
{ 
    bool wheelOnEarth = false; 
    for (b2ContactEdge* edge = wheel->GetContactList(); edge != null; edge = edge->next) 
    { 
     if (edge->contact->IsTouching()) 
     { 
      wheelOnEarth = true; 
      break; 
     } 
    } 
    return wheelOnEarth; 
} 

叫它爲每個車輪每一次步確定,如果汽車在地球上還是不行。

+0

您還需要檢查另一個車身是否是地面(它可能只是車身或別的東西)。 – iforce2d

+0

@ iforce2d,我不確定,地面和其他物體之間是否有區別。這是user1919764的問題。 – Pavel