Actualmente, tengo un juego de plataformas con mosaicos para terreno (gráficos tomados de Cave Story). El juego está escrito desde cero usando XNA, así que no estoy usando un motor existente o un motor de física.
Las colisiones de mosaicos se describen exactamente como se describe en esta respuesta (con SAT simple para rectángulos y círculos), y todo funciona bien.
Excepto cuando el jugador se encuentra con una pared mientras cae / salta. En ese caso, se agarrarán de un azulejo y comenzarán a pensar que han golpeado un piso o techo que en realidad no está allí.
En esta captura de pantalla, el jugador se mueve hacia la derecha y cae hacia abajo. Entonces, después del movimiento, se comprueban las colisiones, y primero, resulta que el personaje del jugador colisiona con la ficha 3 del piso y se empuja hacia arriba. En segundo lugar, se encuentra colisionando con el mosaico a su lado y empujado hacia un lado: el resultado final es que el personaje del jugador piensa que está en el suelo y no se cae, y se 'atrapa' en el mosaico mientras se encuentre con él. .
Podría resolver esto definiendo las fichas de arriba a abajo, lo que lo hace caer suavemente, pero luego ocurre el caso inverso y golpeará un techo que no está allí cuando salta hacia arriba contra la pared.
¿Cómo debería abordar la resolución de esto, para que el personaje del jugador pueda caer a lo largo de la pared como debería?