SFML Window::getPosition() 和 setPosition 的坐标不一致

问题描述 投票:0回答:1

在浏览 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
之一被标题栏偏移,而另一个则没有。

c++ sfml
1个回答
0
投票

我正在寻找我遇到的问题并找到了这篇文章,但是在阅读您的问题后,我不确定您是否遇到与我相同的问题。 不过我认为,你必须将 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)));
    }

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.