2015-01-05 42 views
3

该代码不在SFML站点上的教程中。当我编译并运行它时,圆形按比例缩放,因为窗口由用户缩放。我希望圈子保持不变的形状。SFML 2.X中的窗口按比例调整窗口大小的形状.X

当屏幕重新调整大小时,正确的屏幕尺寸和正确的圆弧半径将被打印到控制台,但圆圈绘制到屏幕的方式绝对不是它声称的。圆形不以任何方式在视觉上扭曲,但看起来好像是用不同的值集合来绘制到控制台上。

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; 
} 
+0

本教程包含以下内容:[调整大小的事件](http://www.sfml-dev.org/tutorials/2.2/window-events.php#the-resized-event)和[当窗口显示更多调整大小(http://www.sfml-dev.org/tutorials/2.2/graphics-view.php#showing-more-when-the-window-is-resized) – Hiura

回答

5

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

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

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