How to check if two Box2d bodies collision / overlap at any moment?

Lestat picture Lestat · Jun 26, 2013 · Viewed 7.8k times · Source

How can you check if 2 bodies(with 1 Fixture both) collide(overlaps)?

I know about the ContactListener that fires a method when they start colliding and when they stop. But is there a way to check it in any given moment? Like:

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

Additional details, one of them is sensor. this is in libgdx.

Answer

Jagdeep Singh picture Jagdeep Singh · Jun 27, 2013

You can apply setContactlistner to your world object like

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

The beginContact() method will always call whenever any body will overlap or touch another body.You can also get the information about the body by contact object like contact.getFixtureA().getBody().getUserData(); if you want to do something with them.And when they separate from each other EndContact() method will be called.

Hope This helps.