std::unique_ptr 干扰某些 sf::RenderWindow 功能?
std::unique_ptr interfering with certain sf::RenderWindow functions?
当我从创建 window 的相同范围调用它时,sf::RenderWindow::getPosition()
总是 returns 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;
}
事情是:例如,我有一个 class MainMenu
,我将 sf::RenderWindow *
(带有 window_.get()
)传递给它。
当我从 MainMenu
调用 window_->getPosition()
时,它报告了正确的位置,因此 getPosition()
本身没有错误。只有当我在同一范围内(在 main 中)调用它时才会出错。
顺便说一句,我正在使用 SFML 2.3.1
您正在 while (window_->isOpen())
循环后打印 window 位置。这意味着 window 已关闭,即当您调用 getPosition()
时它不存在。因此,window 仓位未被报告 "correctly," 也就不足为奇了,因为 window 已经关闭(永久关闭,因此它没有仓位)。
sf::RenderWindow::getPosition()
总是 returns 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;
}
事情是:例如,我有一个 class MainMenu
,我将 sf::RenderWindow *
(带有 window_.get()
)传递给它。
当我从 MainMenu
调用 window_->getPosition()
时,它报告了正确的位置,因此 getPosition()
本身没有错误。只有当我在同一范围内(在 main 中)调用它时才会出错。
顺便说一句,我正在使用 SFML 2.3.1
您正在 while (window_->isOpen())
循环后打印 window 位置。这意味着 window 已关闭,即当您调用 getPosition()
时它不存在。因此,window 仓位未被报告 "correctly," 也就不足为奇了,因为 window 已经关闭(永久关闭,因此它没有仓位)。