【问题标题】:SFML Fullscreen and centerSFML 全屏和居中
【发布时间】:2020-08-12 08:54:51
【问题描述】:

 为了扩展我的 SFML Windows 应用程序,我试图弄清楚,该程序最初使用 (640, 480) 运行 strong> 默认尺寸。

 我的目标是以全屏模式执行程序,并将旧的窗口放在中心,这样可以保留原始尺寸和特征。

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

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

 空白参数 'VideoMode()' 不会从 sfml 生成默认比例(不调整大小),这避免了我的程序失真,但有一些功能效果不佳,例如 View 已更改,其余一些图像与旧尺寸一样分布在窗口上,这是合乎逻辑的,因为我的应用程序通过这种方式获取视图.

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

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

【问题讨论】:

    标签: c++ windows sfml


    【解决方案1】:

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

    但是,您希望位于该窗口中心的东西是位于原始窗口大小中心的东西。因此,您可以将视图的中心设置为之前的中心位置:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 哦,是的,这是默认样式,但我想避免的是我的问题上那种屏幕大小调整。
      • 然后我会说,你必须不以像素为单位写下所有内容,而是以通用值(如窗口 widthheightwindow.getSize().x,或window.getSize().y),这样当你改变屏幕分辨率时——所有的精灵、文本和其他属性适应。
      • 对,这个对我有帮助,我试试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2015-09-17
      • 2013-11-14
      • 1970-01-01
      相关资源
      最近更新 更多