SFML-调整窗口大小后居中查看

SFML - Center view after window resize

本文关键字:调整 窗口大小 SFML-      更新时间:2023-10-16

我正在尝试使用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));
}

这会产生这样的效果https://i.stack.imgur.com/UMbtx.png.

这是一个开始,但这并不是我想要的。当我调整窗口大小时,"原始"查看空间在左上角,新可见的对象都在原始矩形的下方或右侧。

我认为这种调整大小的方法很难看。当我以一种分辨率将某个东西放在屏幕中心时,即使在另一种分辨率下,它也应该保持在中心。如何使视图居中,从而发生这种情况?

minecraft就是一个很好的例子。在minecraft中,当您调整窗口大小时,"原始"视口位于最中心,新可见的对象出现在边缘周围。如何在SFML中重新创建它?

只需使用另一个构造函数并通过当前视图的中心:

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)));
}