如何在SFML中创建一致的clicked / Intersects / contains方法?

时间:2016-08-16 15:06:50

标签: c++ sfml

当我调整窗口大小时,我在SFML中的交叉点功能有些问题。 因此,当窗口处于预定义大小时,我确实知道如何检测交叉点或是否点击某些内容等等。 但是当调整窗口大小时,sfml中形状/精灵的golbal边界保持完全相同,而它们在窗口中的呈现会发生变化。 因此,当我现在点击某些东西时,可能会发生正常的SFML包含一个对象的方法告诉我鼠标指针不在里面,即使它看起来像是在屏幕上那样。

我唯一想到的是有一个变量(例如sf :: vector2f),它存储窗口当前的变化与原始大小相比,然后不使用相对于当前窗口的鼠标位置而是(随着变化倍增)投射鼠标位置。

但这可能不是最好的解决方案,所以我想知道我是否遗漏了什么,因此我在寻求建议,在这做什么?

1 个答案:

答案 0 :(得分:1)

您可以使用sf::RenderWindow::mapPixelToCoords方法找出鼠标的正确位置。

从SFML文档:

  

将点从目标坐标转换为世界坐标。

     

此函数查找与给定像素匹配的2D位置   渲染目标。换句话说,它与之相反   图形卡可以找到渲染像素的初始位置。

     

最初,两个坐标系(世界单位和目标像素)   完美匹配。但是,如果您定义自定义视图或调整渲染大小   目标,这个断言不再是真的,即位于的一个点   渲染目标中的(10,50)可以映射到你的渲染目标中的点(150,75)   2D世界 - 如果视图由(140,25)翻译。

     

对于渲染窗口,此函数通常用于查找哪个   点(或对象)位于鼠标光标下方。

     

此版本使用自定义视图进行计算,请参阅另一个   如果要使用当前视图,则函数重载   渲染目标。