У меня есть статические и подвижные объекты. Столкновения обнаруживаются с использованием теоремы разделяющей оси.
Например, в этой ситуации у меня есть два статических объекта (красным):
и подвижный объект между ними:
Мой алгоритм способен вычислить столкновение между двумя из этих объектов, и он также выделяет идеальный вектор разрешения (то есть вектор минимального смещения) для столкновения.
Так, например, когда я проверяю столкновение между зеленым прямоугольником и правым красным прямоугольником, алгоритм выделяет вектор, который говорит мне, как мне нужно переместить зеленый прямоугольник, чтобы разрешить столкновение:
Обратите внимание, что я просто быстро нарисовал это в MSPaint, так что на этом рисунке фактически может быть так, что вектор минимального перевода выталкивает зеленый прямоугольник сверху, но я собираюсь предположить, что он выталкивает его влево / право на самом деле короче.
Общий способ решения этой проблемы - разрешить столкновение только по одному столкновению на кадр, а не по всем сразу. Но в моем случае это приведет к триггеру:
Во-первых, решатель обнаруживает два столкновения, но разрешает только столкновение между правым прямоугольником и зеленым прямоугольником:
Затем в следующем кадре он обнаруживает только одно столкновение, которое находится между левым красным прямоугольником и зеленым прямоугольником, и разрешает его:
Как вы можете видеть, это на самом деле не разрешает столкновение (например, путем выталкивания зеленого прямоугольника вверх), а вместо этого просто бесконечно переключает провалы между двумя состояниями.
Как я могу решить это?