std::unique_ptr 干扰某些 sf::RenderWindow 函数

std::unique_ptr interfering with certain sf::RenderWindow functions?

本文关键字:sf 函数 RenderWindow 干扰 unique ptr std      更新时间:2023-10-16
当我

从创建窗口的同一作用域调用它时,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())。

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

顺便说一下,我正在使用SFML 2.3.1

您正在while (window_->isOpen()) 上循环后打印窗口位置。 这意味着窗口已关闭,即当您调用 getPosition() 时它不存在。 因此,窗口位置没有"正确"报告也就不足为奇了,因为窗口已经关闭(永久关闭,所以它没有位置)。