c++ - SFML 全屏和居中

标签 c++ windows sfml

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

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

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

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

 空白参数'VideoMode()'不会根据sfml进行默认缩放(不调整任何大小),这避免了我的程序变形,但有些功能效果不佳,例如 View 被更改,其余一些图像与旧尺寸一样分布在窗口上,这是合乎逻辑的,因为我的应用程序通过这种方式获取 View .

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

 主要问题是我的应用程序的大多数主要机制仅显示扭曲,例如 Sprite 、主菜单的字体,或者只是 View 占据了屏幕的一半。

最佳答案

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

但是,您想要位于该窗口中心的内容是位于原始窗口大小的中心的内容。因此,您可以将 View 的中心设置为之前的中心位置:

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

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

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

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

关于c++ - SFML 全屏和居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61481977/

相关文章:

windows - DLL 函数调用的间接跳转

c++ - 1.6 的 SFML pollEvent(等效项)

c++ - 资源 union 引发 SFML 中字体的访问冲突

c++ - C++ 标准在哪里描述了指向基元的指针的转换?

c++ - 为什么我们可以在同一个类中声明一个类的静态对象?

c# - 使用 LINQ 构建 Dictionary 轻松访问已安装程序的注册表项

windows - 在 Windows 安装项目中注册和注销 DLL

c++ - Apple Mach-O 链接器 (id) 错误 - 链接器命令失败,退出代码为 1(使用 -v 查看调用)C++ SFML

c++ - 为什么当T不是引用时,返回类型为option <T>时不返回空指针,为什么不返回None

c++ - 没有合适的从 std::string 到 int 的转换