Atualmente, tenho um jogo de plataformas com ladrilhos para o terreno (gráficos emprestados do Cave Story). O jogo foi escrito do zero usando XNA, então não estou usando um mecanismo existente ou físico.
As colisões de lado a lado são descritas exatamente como descrito nesta resposta (com SAT simples para retângulos e círculos), e tudo funciona bem.
Exceto quando o jogador colide com uma parede enquanto cai / pula. Nesse caso, eles pegam um ladrilho e começam a pensar que atingiram um piso ou teto que não está realmente lá.
Nesta captura de tela, o jogador está se movendo para a direita e caindo para baixo. Então, após o movimento, as colisões são verificadas - e primeiro, o personagem do jogador está colidindo com a peça 3 do chão e empurrada para cima. Segundo, ele descobriu que estava colidindo com o ladrilho ao lado dele e empurrado para o lado - o resultado final é que o personagem do jogador pensa que está no chão e não está caindo, e 'pega' o ladrilho enquanto ele o encontra. .
Eu poderia resolver isso definindo os ladrilhos de cima para baixo, o que o faz cair suavemente, mas o caso inverso acontece e ele atinge um teto que não existe quando se pula contra a parede.
Como devo abordar a resolução disso, para que o personagem do jogador possa cair ao longo da parede como deveria?