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