Обнаружение стороны столкновения круг-прямоугольник в libgdx

Я часами искал решение этой проблемы: я разрабатываю небольшую нисходящую игру с libgdx (возможно, имеет значение, какой движок я использую). Теперь я должен реализовать обнаружение столкновений между моим персонажем (круг) и стеной (прямоугольник). Я хочу, чтобы персонаж скользил вдоль стены при столкновении, если скольжение возможно. Позволь мне объяснить:

Если я двигаюсь на 45 градусов вверх, я могу столкнуться с опущенным, левым или угловым углом стены.Если я сталкиваюсь с левым, я хочу остановить движение x и двигаться только вверх. Если я покину стену, то я хочу продолжать двигаться прямо вверх. То же самое с нижней стороной (остановка y-движения)Если я сталкиваюсь с Углом, я хочу остановить движение (скольжение невозможно).

На самом деле я проверяю, пересекает ли левая линия прямоугольника мой круг. Затем я проверяю пересечение между левой линией стены и моим кругом и нижней линией стены и моим кругом. В зависимости от того, в каком месте пересечения я остановился, я вернул x / y возможность моего круга и установил x / y Speed на 0. Проблема в том, что в большинстве случаев нестолкновение БТперекрытие встречается,. Таким образом, нижняя проверка возвращает истину, даже если в действительности круг будет сталкиваться только с правым. В этом случае оба теста пересечения вернули бы истину, и я сбросил бы обе скорости как при угловом столкновении. Как я могу решить эту проблему? Есть ли лучший способ для обнаружения столкновения и столкновения стороны или угла? Я неТочная точка столкновения нужна только со стороны прямоугольника.

Редактировать: Я должен сказать, что тезисы неt вращается только параллельно оси X.

Ответы на вопрос(2)

Ваш ответ на вопрос