SFML 全屏和居中

SFML Fullscreen and center

为了扩展我的 SFML Windows 应用程序,我正在尝试解决这个问题,该程序最初 运行 默认情况下具有 (640, 480) 尺寸。

我的 objective 是在全屏模式下执行程序,并将旧的 window 放在中间,这样可以保留原始尺寸和特征.

我正在使用默认 SFML 样式初始化主文件应用程序 'Style::Fullscreen'.

RenderWindow(sf::VideoMode(), "app.exe", sf::Style::Fullscreen);

空白参数 'VideoMode()' 不会从 sfml 中创建默认比例(不调整任何大小),这样可以避免我是一个扭曲的程序,但某些功能也无法正常工作,例如 View 被更改,其余一些图像在 window 上分发旧尺寸,这是合乎逻辑的,因为我的应用程序通过这种方式获取视图。

sf::View worldview(RenderWindow.getDefaultView());

主要问题是我的应用程序的大多数主要机制只是显示失真,例如精灵、主菜单的字体,或者只是视图占据了屏幕的一半。

SFML Window 的默认样式是 sf::Style::Default,而不是 sf::Style::Fullscreen。 默认为您提供标准选项,例如最小化、全屏和退出。要使用它们,您需要设置事件检测(单击按钮)。 原则上,这就足够了,写在游戏循环中 while (window.isOpen())

sf::Event _event;
while (window.pollEvent(_event)) {
    if (_event.type == sf::Event::Closed) {
        window.close();
    }
}

视图大小应与全屏分辨率相同,如您所写:
sf::View worldview(RenderWindow.getDefaultView());
应该没问题。

但是,您想要位于 window 中心的东西是原始 window 尺寸中心的东西。因此,您可以将视图的中心设置为之前的中心:

    const sf::Vector2u originalSize{ 640u, 480u };
    worldview.setCenter(sf::Vector2f(originalSize / 2u));

请注意,这意味着视图的范围将具有负值。

例如,在 1920x1080 显示器上:
视图的大小当然是:1920x1080。
视图的中心是(现在很明显):(320, 240).
(0, 0) - (640, 480) 坐标范围在中心。

该视图的左上角(屏幕左上角)将为:(-640, -300)。
view/screen 的右下角将是:(1280, 780).