Supongamos que uso un sistema de detección de colisión discreto simple donde muevo todos los objetos y luego verifico si hay colisiones. Quiero que los objetos en colisión se separen (por supuesto) y se les asignen velocidades de respuesta apropiadas (rebote, deslizamiento, detención, etc.).
Cuando tengo un par de objetos que chocan, ¿cómo los separo sin terminar con uno o ambos chocando con otros objetos?
La única forma de evitar que esto suceda es evitar la penetración en primer lugar. Antes de mover un objeto, asegúrese de que sea legal. Tenga en cuenta que esto significa que debe mover sus objetos uno a la vez para evitar el caso de dos objetos que se mueven entre sí.
Si no ocurre penetración, no tiene que restablecer ninguna posición y, por lo tanto, no activará ninguna penetración secundaria.
fuente
Lo que suelo hacer es lo siguiente:
Cuando separa objetos y termina con más colisiones, simplemente repite nuevamente, hasta que se alcanza una cantidad máxima de pasos o los objetos penetran menos de un umbral predefinido.
fuente