SFML - 窗口调整大小后的中心视图

时间:2016-07-19 19:00:56

标签: c++ graphics sfml desktop

我正在尝试使用c ++和SFML创建一个简单的应用程序。我希望应用程序能够以任何分辨率工作 - 窗口或全屏。

我在文档中找到的最接近解决方案的是这个简单的代码片段。

 if (event.type == sf::Event::Resized)
{
    // update the view to the new size of the window
    sf::FloatRect visibleArea(0, 0, event.size.width, event.size.height);
    window.setView(sf::View(visibleArea));
}

这会产生一个看起来像http://i.imgur.com/RvCOuKi.png的效果。

这是一个开始 - 但这并不是我正在寻找的。当我调整窗口大小时,“原始”查看空间位于左上角,新显示的对象全部位于原始矩形的下方或右侧。

我认为这种调整大小的方法很难看。当我以一个分辨率在屏幕中央放置一些东西时,它应该保持在中心,即使在另一个分辨率。如何以这种方式使视图居中?

这方面的一个很好的例子是我的世界。在我的世界中,当您调整窗口大小时,“原始”视口位于正中心,并且边缘周围会出现新显示的对象。如何在SFML中重新创建它?

1 个答案:

答案 0 :(得分:1)

只需使用another constructor并传递当前视图的中心:

if (event.type == sf::Event::Resized)
{
    // update the view to the new size of the window and keep the center
    window.setView(sf::View(window.getView().getCenter(), sf::Vector2f((float)event.size.width, (float)event.size.height)));
}