Obecnie mam platformówkę z kafelkami terenu (grafika zapożyczona z Cave Story). Gra została napisana od podstaw za pomocą XNA, więc nie używam istniejącego silnika ani silnika fizyki.
Zderzenia kafelków są opisane dokładnie tak, jak opisano w tej odpowiedzi (z prostym SAT dla prostokątów i kół) i wszystko działa dobrze.
Z wyjątkiem sytuacji, gdy gracz wpada na ścianę podczas upadku / skoku. W takim przypadku złapią się płytki i zaczną myśleć, że uderzyli o podłogę lub sufit, których tak naprawdę nie ma.
Na tym zrzucie ekranu gracz porusza się w prawo i spada w dół. Więc po ruchu kolizje są sprawdzane - i po pierwsze, okazuje się, że postać gracza zderza się z płytką 3 od podłogi i pcha w górę. Po drugie, koliduje z kafelkiem obok niego i pcha się na boki - końcowym rezultatem jest to, że postać gracza myśli, że leży na ziemi i nie spada, i „łapie” kafelek tak długo, jak długo na niego wpadnie. .
Mógłbym to rozwiązać, definiując zamiast tego płytki od góry do dołu, co sprawia, że spada on płynnie, ale wtedy zdarza się odwrotna sprawa i uderzy w sufit, którego nie ma, skacząc w górę o ścianę.
Jak podejść do rozwiązania tego problemu, aby postać gracza mogła po prostu spaść wzdłuż ściany, tak jak powinna?