В качестве хобби я занимаюсь разработкой 2D-игры. У меня есть базовое обнаружение столкновений, реализованное с использованием метода разделительной оси. Когда два объекта сталкиваются, я проецирую один из них вне столкновения вдоль оси, которая имеет наименьшее количество перекрытий.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда объект движется довольно быстро, ось с наименьшим перекрытием не всегда является правильным направлением. Лучший пример, который у меня есть, это когда объект движется вниз (вдоль оси + y) из-за имитации гравитационного притяжения и сталкивается с объектом окружающей среды, близким к «краю» (как на краю обрыва). Если объект падал достаточно быстро, ось с наименьшим количеством перекрытий оказывается осью x, и объект перемещается вбок вдоль оси x.
Как лучше всего обращаться с быстро движущимися объектами? Я рассмотрел перемещение падающего объекта небольшими шагами, что, похоже, добавляет много дополнительных затрат. Я также рассмотрел вопрос о том, чтобы дать объектам окружения «предпочтение» относительно какой оси проецировать падающий объект, но это кажется грязным и подверженным ошибкам.
Есть ли способ сделать это без дополнительных накладных расходов?