SFML 2.X中的形状会随着窗口的大小成比例地调整

6
这段代码来自于SFML网站上的教程。当我编译并运行它时,圆形会随着用户调整窗口大小而按比例缩放。我希望圆形保持不变的形状。
当屏幕尺寸被改变时,正确的屏幕尺寸和正确的圆形半径都会被打印到控制台上,但是圆形在屏幕上的绘制方式明显与其声称的方式不同。圆形在视觉上没有失真,但看上去好像是用一组与控制台上打印的值不同的值来绘制的。
如果有帮助的话,抗锯齿级别对绘制形状没有影响。
#include <iostream>
#include <SFML/Graphics.hpp>

int main()
{
    sf::ContextSettings settings;
    settings.antialiasingLevel = 8;

    sf::RenderWindow window(sf::VideoMode(200, 200), "Title", sf::Style::Default, settings);
    sf::CircleShape shape(100);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            else if (event.type == sf::Event::Resized)
            {
                std::cout << "resize: ("  << event.size.width << ',' << event.size.height << ") -> " << shape.getRadius() << std::endl;
            }
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

1
这些教程涵盖了以下内容:调整大小事件窗口调整大小时显示更多内容 - Hiura
1个回答

14
以下代码添加到resize事件中将解决该问题。
window.setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.height)));

问题似乎是视图没有自动缩放以适应新的分辨率。


可能需要使用 static_cast<float> 将宽度和高度转换为浮点数。它们是无符号整数。FloatRect 需要浮点数。还应该将 0 写成 0.0F。 - Robert Russell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接