在 SFML 2.X 中使用 window 按比例调整形状大小
Shapes proportionally resize with window in SFML 2.X
代码不在 SFML 站点的教程中。当我编译并运行它时,圆按比例缩放,因为 window 被用户缩放。我希望圆圈保持不变。
当屏幕调整大小时,正确的屏幕尺寸和正确的圆半径都会打印到控制台,但圆在屏幕上的绘制方式绝对不是它声称的那样。圆圈在视觉上没有任何变形,但看起来好像是用一组不同的值绘制到控制台上的。
如果有帮助,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;
}
在调整大小的事件中添加以下行将解决该问题。
window.setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.height)));
问题似乎是视图未自动缩放以适应新分辨率。
代码不在 SFML 站点的教程中。当我编译并运行它时,圆按比例缩放,因为 window 被用户缩放。我希望圆圈保持不变。
当屏幕调整大小时,正确的屏幕尺寸和正确的圆半径都会打印到控制台,但圆在屏幕上的绘制方式绝对不是它声称的那样。圆圈在视觉上没有任何变形,但看起来好像是用一组不同的值绘制到控制台上的。
如果有帮助,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;
}
在调整大小的事件中添加以下行将解决该问题。
window.setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.height)));
问题似乎是视图未自动缩放以适应新分辨率。