如何检查两个矩形,一个是旋转的,在SFML中交叉

时间:2015-10-13 09:49:39

标签: c++ sfml rect

我在一个封闭的矩形瓷砖地图中有一个旋转的矩形。 检查玩家(旋转的矩形)是否与瓷砖地图的一个矩形相交的最佳方法是什么?

来自游戏内部的图片,以更好地展示地图的样子: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数组内。

1 个答案:

答案 0 :(得分:3)

SFML不提供碰撞检测,它只有方法来检查两个轴对齐的矩形是否相交。如果你需要更复杂的东西,你必须自己实施。

如果您不需要精确检测,可以使用地图的矩形测试Sprite.getGlobalBounds().intersects(...)。 如果您想要理想的碰撞检测,您可以选择多个选项:

  • Pixel perfect Collision。首先检查边界框是否与地图图块相交,然后检查所有非透明像素是否发生碰撞。不是很快,但易于实施,可能适合您的情况。
  • 数学方法,还有一个,但看看分离轴定理。如果您仅限于矩形(或/和圆形和凸多边形),则效果最佳。