Resolución de colisiones: ¿cómo evitar la interpenetración / el túnel causado por el manejo previo de colisiones?

Mi juego procesa colisiones mundiales seguidas de colisiones de entidades. El problema aquí es que las entidades pueden atravesar las panetworkinges del siguiente cuadro cuando las comprobaciones mundiales se ejecutan de nuevo como resultado de la resolución de colisión anterior. Por ejemplo:

  1. Entity1 está contra una panetworking y empujando contra ella
  2. Entity2 se ejecuta en Entity1, la detección de colisiones resuelve Entity1 dentro de la panetworking.
  3. Las colisiones mundiales empujan a Entity1 al otro lado de la panetworking.

Lo que sucede es que Entity2 empuja a Entity1 contra la panetworking lo suficiente como para que cuando la detección de colisiones del mundo intente encontrar la distancia más corta fuera de la panetworking, esa position esté del otro lado.

El lugar para arreglarlo está en el paso 2.

Si Entity2 se ejecuta en Entity1, Entity1 se mueve, pero solo si la location resultante no es una nueva colisión. En ese caso, deberá volver a mover Entity2 a su position original o a alguna otra solución personalizada (por ejemplo, intente mover Entity1 a una dirección diferente que no provoque una colisión).