当我调整窗口大小时,我在SFML中的交叉点功能有些问题。 因此,当窗口处于预定义大小时,我确实知道如何检测交叉点或是否点击某些内容等等。 但是当调整窗口大小时,sfml中形状/精灵的golbal边界保持完全相同,而它们在窗口中的呈现会发生变化。 因此,当我现在点击某些东西时,可能会发生正常的SFML包含一个对象的方法告诉我鼠标指针不在里面,即使它看起来像是在屏幕上那样。
我唯一想到的是有一个变量(例如sf :: vector2f),它存储窗口当前的变化与原始大小相比,然后不使用相对于当前窗口的鼠标位置而是(随着变化倍增)投射鼠标位置。
但这可能不是最好的解决方案,所以我想知道我是否遗漏了什么,因此我在寻求建议,在这做什么?
答案 0 :(得分:1)
您可以使用sf::RenderWindow::mapPixelToCoords方法找出鼠标的正确位置。
从SFML文档:
将点从目标坐标转换为世界坐标。
此函数查找与给定像素匹配的2D位置 渲染目标。换句话说,它与之相反 图形卡可以找到渲染像素的初始位置。
最初,两个坐标系(世界单位和目标像素) 完美匹配。但是,如果您定义自定义视图或调整渲染大小 目标,这个断言不再是真的,即位于的一个点 渲染目标中的(10,50)可以映射到你的渲染目标中的点(150,75) 2D世界 - 如果视图由(140,25)翻译。
对于渲染窗口,此函数通常用于查找哪个 点(或对象)位于鼠标光标下方。
此版本使用自定义视图进行计算,请参阅另一个 如果要使用当前视图,则函数重载 渲染目标。