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