我想知道两个矩形是否使用SFML
相互重叠。这是我的代码:
if (ball.getLocalBounds().intersects(paddle.getLocalBounds()))
{
//perform action
}
如果两个矩形相互重叠,代码将执行操作。但不知何故,它总是在每种情况下返回true
,即使在两个矩形甚至不相交的情况下,例如:
从图中可以看出,左侧球拍与球的距离并不均匀,但控制台仍然表示它们相互重叠。这里发生了什么,你如何解决这个问题?
编辑:我尝试用足够的代码制作测试项目来重现问题。从两个矩形的位置,我们可以看到它们绝对不会相互交叉。但是,它仍然表示它们相互重叠。
#include <SFML\Graphics.hpp>
#include <iostream>
using namespace std;
using namespace sf;
int main()
{
RenderWindow window(VideoMode(800, 600), "Test", Style::Close);
RectangleShape r1 = RectangleShape(Vector2f(100, 100));
RectangleShape r2 = RectangleShape(Vector2f(100, 100));
r1.setPosition(0, 0);
r2.setPosition(700, 500);
while (window.isOpen())
{
Event e;
while (window.pollEvent(e))
{
if (e.type == Event::Closed)
{
window.close();
}
}
cout << r1.getLocalBounds().intersects(r2.getLocalBounds()) << endl;
window.clear();
window.draw(r1);
window.draw(r2);
window.display();
}
return 0;
}
答案 0 :(得分:3)
getLocalBounds()
的文档说
返回的矩形是本地坐标,这意味着它 忽略那些转换(平移,旋转,缩放......) 适用于实体。换句话说,这个函数返回 实体坐标系中实体的边界。
可以让您了解两个矩形始终重叠的原因。全局(x: 300, y: 300, w: 500, h: 400)
矩形在其自己的坐标系中为(x: 0, y: 0, w: 500, h: 400)
。
你的界限都从(x: 0, y: 0)
开始,因此它们总是相交。