为了扩展我的 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/