Я пытаюсь внедрить систему столкновений в 2D-игру, которую я делаю. Теорема о разделяющей оси (как описано в учебнике по столкновению с metanet ) кажется эффективным и надежным способом обработки обнаружения столкновений, но мне не совсем нравится метод реагирования на столкновения, который они используют. При слепом смещении вдоль оси наименьшего перекрытия алгоритм просто игнорирует предыдущую позицию движущегося объекта, что означает, что он не сталкивается со стационарным объектом так сильно, как входит в него и затем отскакивает.
Вот пример ситуации, когда это будет иметь значение:
Согласно методу SAT, описанному выше, прямоугольник просто выпадет из треугольника, перпендикулярного его гипотенузе:
Однако реально, прямоугольник должен остановиться в нижнем правом углу треугольника, так как это будет точка первого столкновения, если он будет непрерывно двигаться вдоль своего вектора смещения:
Теперь, это может на самом деле не иметь значения во время игры, но я хотел бы знать, есть ли способ эффективно и вообще добиться точных перемещений таким образом. Последние несколько дней я ломал голову над этим, и пока не хочу сдаваться!
(Перекрестная публикация от StackOverflow, надеюсь, это не противоречит правилам!)