2015-10-13 4 views
1

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

Изображения из игры, чтобы лучше показать, что карта выглядит следующим образом: You can see the player (Blue rect) and the map borders (Red rects). The blue rect must not leave outside the red rectarea

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

ответ

3

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

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

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