В даний час у мене є платформер з плитками для місцевості (графіка, запозичена у Cave Story). Гра написана з нуля за допомогою XNA, тому я не використовую існуючий двигун чи фізику.
Зіткнення плиток описані майже точно так, як описано в цій відповіді (з простим SAT для прямокутників і кіл), і все працює добре.
За винятком випадків, коли гравець врізається в стіну під час падіння / стрибків. У такому випадку вони зачепляться за плитку і почнуть думати, що потрапили в підлогу або стелю, яких насправді немає.
На цьому скріншоті гравець рухається праворуч і падає вниз. Тож після руху перевіряються зіткнення - і по-перше, виявляється, персонаж гравця зіштовхується з плиткою 3-ї з підлоги і висувається вгору. По-друге, він виявив, що він зіштовхується з плиткою біля себе, і штовхнувся вбік - кінцевим результатом є те, що персонаж гравця думає, що він на землі і не падає, і «ловить» на плитці до тих пір, поки він натикається на неї .
Я міг би вирішити це, визначивши плитку зверху вниз, а це змушує його плавно падати, але тоді відбувається зворотний випадок, і він вдариться про стелю, якої немає, коли стрибає вгору об стіну.
Як слід підходити до вирішення цього питання, щоб персонаж гравця міг просто впасти уздовж стіни як слід?