Я потратил часы на то, чтобы найти решение: я разрабатываю небольшую нисходящую игру с libgdx (возможно, это важно, какой движок я использую). Теперь я должен реализовать обнаружение столкновения между моим персонажем (кругом) и стеной (прямоугольник). Я хочу, чтобы персонаж скользил вдоль стены при столкновении, если скольжение возможно. Позвольте мне объяснить:
- Если я двигаюсь на 45 градусов вверх, я могу столкнуться с нисходящим, слева или углу стены.
- Если я сталкиваюсь с левой, я хочу остановить движение x и двигаться только вверх. Если я покину стену, то я хочу двигаться дальше. Такой же с нижней стороной (остановка y-движения)
- Если я сталкиваюсь с Corner, я хочу остановить движение (скользящий невозможен).
То, что я делаю на самом деле, это проверить, пересекает ли левая линия прямоугольника мой круг. Затем я проверяю пересечение между левой линией стены и моим кругом, нижней линией стены и моим кругом. В зависимости от того, какое пересечение происходит, я возвращаю x/y из моего круга и устанавливаю x/y Speed на 0. Проблема заключается в том, что чаще всего не столкновение bt a перекрытие происходит. Таким образом, нижняя проверка возвращает true, даже если на самом деле круг будет только сталкиваться с правом. В этом случае оба теста пересечения вернут true, и я бы reset обе скорости, например, при столкновении углов. Как я могу решить эту проблему? Является ли лучший способ обнаружения столкновения и столкновения стороной или углом? Мне не нужна точная точка столкновения только на стороне прямоугольника.
Edit: Я должен сказать, что прямоугольники не вращаются только параллельно оси х.