Attualmente, ho un platform con piastrelle per terreno (grafica presa in prestito da Cave Story). Il gioco è scritto da zero usando XNA, quindi non sto usando un motore esistente o un motore fisico.
Le collisioni di piastrelle sono descritte praticamente esattamente come descritto in questa risposta (con semplice SAT per rettangoli e cerchi), e tutto funziona bene.
Tranne quando il giocatore si imbatte in un muro mentre cade / salta. In tal caso, afferreranno una piastrella e inizieranno a pensare di aver colpito un pavimento o un soffitto che non è effettivamente lì.
In questa schermata, il giocatore si sta muovendo a destra e sta cadendo verso il basso. Quindi, dopo il movimento, vengono verificate le collisioni - e per prima cosa, il personaggio del giocatore si scontra con la tessera 3 ° dal pavimento e spinto verso l'alto. In secondo luogo, si è trovato a scontrarsi con la tessera accanto a lui, e ha spinto lateralmente - il risultato finale è che il personaggio del giocatore pensa di essere a terra e non sta cadendo, e 'prende' sulla tessera fintanto che ci si imbatte .
Potrei risolverlo definendo invece le tessere dall'alto verso il basso, il che lo fa cadere senza intoppi, ma poi succede il caso inverso e colpirà un soffitto che non è lì quando salta verso l'alto contro il muro.
Come dovrei avvicinarmi a risolverlo, in modo che il personaggio del giocatore possa semplicemente cadere lungo il muro come dovrebbe?