【问题标题】:Shapes proportionally resize with window in SFML 2.X形状与 SFML 2.X 中的窗口按比例调整大小
【发布时间】:2015-03-03 08:51:42
【问题描述】:

代码不在 SFML 网站上的教程中。当我编译并运行它时,当用户缩放窗口时,圆圈会按比例缩放。我希望圆圈保持不变。

当屏幕重新调整大小时,正确的屏幕尺寸和正确的圆半径都会打印到控制台,但圆绘制到屏幕上的方式绝对不是它所声称的那样。圆圈在视觉上没有任何扭曲,但看起来好像是用一组不同的值绘制到控制台上的。

antialiasingLevel 对黎明的形状没有影响,如果有帮助的话。

#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;
}

【问题讨论】:

标签: c++ sfml


【解决方案1】:

在调整大小的事件中添加的以下行将更正问题。

window.setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.height)));

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

【讨论】:

  • 可能要static_cast宽度和高度。它们是无符号整数。 FloatRect 需要浮点数。可能也应该把 0 写成 0.0F。
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
相关资源
最近更新 更多