在浏览 SFML 教程时,我尝试编写一个小代码示例,随着时间的推移将窗口向右滑动,它的行为方式出乎我的意料(窗口一直滑到底部)。这是一个最小的示例,尽管窗口与
getPosition
吐出的坐标完全相同,但窗口仍在移动 setPosition
#include <SFML/Window.hpp>
#include <SFML/System/Clock.hpp>
#include <SFML/System/Time.hpp>
int main(){
sf::Window window(sf::VideoMode(800,600), "Aydin's Window");
window.setPosition(sf::Vector2i(10, 10));
sf::Clock clock;
while(window.isOpen()){
sf::Event event;
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed)
window.close();
}
sf::Time elapsed = clock.getElapsedTime();
if(elapsed > sf::milliseconds(100)){
sf::Vector2i pos = window.getPosition();
window.setPosition(pos);
clock.restart();
}
}
return 0;
}
人们会期望这段代码将窗口保持在原来的位置,但在我的机器上它却向右和向下滑动。我有一个朋友运行相同的代码。在他的机器上,它向左和向上滑动。这是怎么回事?
编辑:当我创建没有装饰的窗口(sf::Style::None)时,窗口保持在原来的位置。我猜
getPosition
或 setPosition
之一被标题栏偏移,而另一个则没有。
我正在寻找我遇到的问题并找到了这篇文章,但是在阅读您的问题后,我不确定您是否遇到与我相同的问题。 不过我认为,你必须将 sf::View 居中
sf::Event event;
while (window.pollEvent(event))
if (event.type == sf::Event::Resized)
{
float width = static_cast<float>(event.size.width);
float height = static_cast<float>(event.size.height);
window.setView(sf::View(sf::FloatRect(0, 0, width, height)));
}
希望有帮助。