【问题标题】:Andengine Box2D How to know a car is flying?Andengine Box2D 如何知道一辆车在飞?
【发布时间】: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 但是,即使传感器像图片中那样埋在地下,接触监听器也会让我多次结束传感器和地面之间的接触。我只用轮体尝试过同样的过程,结果是一样的。那么我在这里的错误是什么,或者更好的方法是什么?感谢您的帮助。

【问题讨论】:

  • 地面是由什么制成的...是多个固定装置还是只有一个?

标签: android box2d andengine


【解决方案1】:

试试这个:

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;
}

每个轮子的每个时间步都调用它来确定汽车是否在地球上。

【讨论】:

  • 您还需要检查另一个主体是否是地面(可能只是车身或其他物体)。
  • @iforce2d,我不确定,地面和其他物体之间是否有区别。这是对user1919764的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
相关资源
最近更新 更多