std :: unique_ptr是否干扰了某些sf :: RenderWindow函数?

时间:2016-04-27 12:29:20

标签: c++ pointers sfml smart-pointers unique-ptr

当我从创建窗口的同一范围内调用它时,

sf::RenderWindow::getPosition()始终返回0, 0而不是正确的位置。

以下是重现问题的示例代码:

#include <iostream>
#include <memory>
#include <SFML/Graphics.hpp>

int main() {
  std::unique_ptr<sf::RenderWindow> window_;

  window_ = std::unique_ptr<sf::RenderWindow>(
    new sf::RenderWindow(sf::VideoMode(800, 600), "asd", sf::Style::Default)
  );
  window_->setFramerateLimit(30);
  window_->setVerticalSyncEnabled(false);

  while (window_->isOpen()) {
    sf::Event evt;
    while (window_->pollEvent(evt)) {
      if (evt.type == sf::Event::Closed) { window_->close(); }
    }
    window_->clear();
    window_->display();
  }

  const sf::Vector2i wpos = window_->getPosition();
  std::cout << "window position: " << wpos.x << "/" << wpos.y <<std::endl;

  return 0;
}

事情是:例如我有一个MainMenu课,我传递sf::RenderWindow *window_.get())。

当我从window_->getPosition()致电MainMenu时,它会报告正确的位置,因此getPosition()本身没有错误。当我在同一范围内(在主要范围内)调用它时,这是唯一的错误。

我顺便使用SFML 2.3.1

1 个答案:

答案 0 :(得分:6)

while (window_->isOpen())上循环后打印窗口位置。这意味着窗口已关闭,即当您调用getPosition()时它不存在。因此,毫不奇怪,窗口位置未被正确报告,并且#34;因为窗口已经关闭(永久,所以它没有位置)。