Как проверить, пересекаются ли два прямоугольника, один повернут в SFML

У меня есть повернутый прямоугольник внутри замкнутой карты прямоугольников.
Как лучше всего проверить, пересекается ли игрок (это повернутый прямоугольник) с одним из прямоугольников карты тайлов?

Картинка из игры, чтобы лучше показать, как выглядит карта:Вы можете видеть игрока (синий прямоугольник) и границы карты (красные прямоугольники). Синий прямоугольник не должен выходить за пределы красного прямоугольника

Если это имеет значение, тип игрока sf::Shape и данные карты находятся внутри int массив.

1

Решение

SFML не обеспечивает обнаружение столкновений, у него есть только способ проверить, пересекаются ли два выровненных по оси прямоугольника. Если вам нужно что-то более сложное, вам придется реализовать его самостоятельно.

Если вам не нужно точное определение, вы можете проверить Sprite.getGlobalBounds().intersects(...) с прямоугольником карты.
Если вы хотите идеальное обнаружение столкновений, у вас есть несколько вариантов:

  • Pixel perfect Collision. Сначала проверьте, пересекают ли ограничивающие рамки плитку карты, и они проверяют все непрозрачные пиксели на столкновение. Не очень быстро, но легко реализуемо и может подойти для вашего случая.
  • Математических методов больше одного, но взгляните на теорему о разделяющей оси. Если вы ограничены только прямоугольниками (и / или кругами и выпуклыми многоугольниками), это будет работать лучше всего.
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]