May 8, 2012 at 6:30 PM
Edited May 8, 2012 at 6:35 PM
it's not very clear what you want to achieve. Take a step back and look at what you are asking. The engine does collision detection *and* collision response. Since we deal with rigid bodies collision response would mean separating the bodies so that they
do not overlap. They can still be "touching" but they are not allowed to try to interpenetrate each other. In other words applying the law of conservation of momentum will mean that after a collision, at the end of the World.Step() when the solver is done
with everything, the bodies are simply moving at some new speed and direction free from overlap and with constant acceleration (equal to gravity which is global). Technically they are not colliding anymore (first law of motion ignoring gravity) - that's the
collision response for rigid bodies. Now since the solver is imperfect more than one time step might be necessary to satisfy all forces and constraints but that's another topic.
The above is why a Body.IsColliding() method would be very misleading. What is used, instead, is an event system (callbacks): mainly you deal with collisions through firing of events that occur during the solver iterations while it's trying to calculate
the new speeds. Highest level events are OnCollision() and OnSeparation(). Also there are the contact methods Begin/EndContact, Pre/PostSolve for more specific needs.
You can also get the contact list for the whole world and check if your body is in contact with anything else. That's closest to IsColliding() but actually means IsTouching() and there is even yet another method called IsTouching().
You can read more in the manual (of Box2D) and also this site:
You can also use geometric queries like TestOverlap, QueryAABB and RayCasts.
Finally you can have special "sensor" fixtures for detecting overlap.
To complicate stuff further there is Continuous Collision Detection (CCD) - a unique feature - that also takes into account the projected positions in time (TOI - time of impact).
Each of the above good for different scenarios. Without knowing more I suppose you are actually looking for overlap detection so QueryAABB is probably the method you should look into. Or subscribe to the OnCollision and OnSeparation events.