Salut!
Alors ce qu'il te faut si tu utilise des AABB (rectangle aligné sur les axes), c'est un sweep test :
ca va te permetre de calculer la distance que peu parcourir ton objet avant d'etre en collision avec un autre.
Une fois que tu aura fait ce premier deplacement, il te suffit de le modifier pour qu'il continue dans une direction valide par rapport a cette première collision (et recommencer, en pratique tu autoriser qu'une collision max par frame).
http://www.gamedev.net/page/resources/_/technical/game-programming/swept-aabb-collision-detection-and-response-r3084
Un petit ajout par rapport à l'article : il faut impérativement faire une broadphase pour qu'il fonctionne, c'est a dire étendre ton AABB avec le déplacement. Avant d'utiliser l'algorithme de sweep, tester que ton AABB étendu interesecte avec celle contre la quelle tu veux tester la collision.