【发布时间】:2013-07-02 03:00:20
【问题描述】:
我们如何知道 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 但是,即使传感器像图片中那样埋在地下,接触监听器也会让我多次结束传感器和地面之间的接触。我只用轮体尝试过同样的过程,结果是一样的。那么我在这里的错误是什么,或者更好的方法是什么?感谢您的帮助。
【问题讨论】:
-
地面是由什么制成的...是多个固定装置还是只有一个?