c++ - 如何检查两个矩形(一个旋转)是否在 SFML 中相交

标签 c++ sfml rect

我在封闭的矩形瓦片 map 中有一个旋转的矩形。 检查播放器(旋转的矩形)是否与图 block map 的矩形之一相交的最佳方法是什么?

为了更好地展示 map 的外观,来自游戏内部的图片:You can see the player (Blue rect) and the map borders (Red rects). The blue rect must not leave outside the red rectarea

如果重要的话,Player 的类型是 sf::Shape 并且 map 的数据在 int 数组中。

最佳答案

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

如果不需要精确检测,可以用 map 的矩形检测Sprite.getGlobalBounds().intersects(...)。 如果你想要理想的碰撞检测,你有不止一种选择:

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

关于c++ - 如何检查两个矩形(一个旋转)是否在 SFML 中相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33099458/

相关文章:

c++ - 什么场景会**有用?

c++ - 在 C++17 中没有从 std::string 到 std::string_view 的隐式转换(在 std::experimental::basic_string_view 中)

c++ - SFML - 从纹理加载后 Sprite 为空白

c++ - SFML 纹理显示为白色框

javascript - 我试图在 svg 元素中创建一个 rect 元素,但它不起作用

c++ - 使用哪个数值库从 Matlab 移植到 C++?

c++ - OpenGL 着色器的 .HLSL 文件

c++ - 如何在 SFML 中为线条着色?

java - Android RectF 坐标与触摸坐标不同吗?

python - 如何在 Python 中组合重叠的矩形