【发布时间】:2016-08-21 18:05:35
【问题描述】:
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() 本身没有故障。只有当我在同一范围内(在 main 中)调用它时才会出错。
顺便说一下,我使用的是 SFML 2.3.1
【问题讨论】:
-
你应该同时构造
unique_ptr并初始化它:unique_ptr<sf::RenderWindow> window_(new sf::RenderWindow(sf::VideoMode(800, 600), "asd", sf::Style::Default));。 -
我知道,但这只是一个示例代码。在我的真实游戏中,
unique_ptr是一个类成员变量,我稍后会构建窗口 -
顺便说一句,不需要
newRenderWindow。
标签: c++ pointers sfml smart-pointers unique-ptr