Как проверить, сталкиваются ли два тела Box2d / перекрываются в любой момент?

Как вы можете проверить, сталкиваются ли 2 тела(с 1 креплением) (перекрытия)?

Я знаю о ContactListener, который запускает метод, когда они начинают сталкиваться и когда они останавливаются. Но есть ли способ проверить это в любой данный момент? Например:

if(body1.overlaps(body2))...

дополнительные детали, один из них датчик. это в libgdx.

3 ответов


вы можете подать заявку setContactlistner для вашего объекта мира, как

world.setContactListener(new ContactListener() {

            @Override
        public void beginContact(Contact contact) {

         if(contact.getfixtureA.getBody().getUserData()=="body1"&&
               contact.getfixtureB.getBody().getUserData()=="body2")
            Colliding = true;
            System.out.println("Contact detected");
        }

        @Override
        public void endContact(Contact contact) {
            Colliding = false;
            System.out.println("Contact removed");
        }

        @Override
        public void postSolve(Contact arg0, ContactImpulse arg1) {
            // TODO Auto-generated method stub
        }

        @Override
        public void preSolve(Contact arg0, Manifold arg1) {
            // TODO Auto-generated method stub
        }
    });

на beginContact() метод всегда будет вызывать, когда любое тело будет перекрываться или касаться другого тела.Вы также можете получить информацию о теле contact объект contact.getFixtureA().getBody().getUserData(); если вы хотите что-то сделать с ними.И когда они отделяются друг от друга EndContact() метод будет вызван.

надеюсь, это поможет.


просто проверьте, если контакт, который вы ищете, находится в списке контактов:

for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next)
{
     if (ce.other == body2 && ce.contact.isTouching())
     {
         // Do what you want here

         break;
     }
}

вы можете создать переменную collision: Когда равно 0, столкновение равно false; Когда равно 1, столкновение равно true;

Так:

if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}