A. *_* D. 1 c++ pointers smart-pointers unique-ptr sfml
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;
}
Run Code Online (Sandbox Code Playgroud)
问题是:我有一个MainMenu
我传递的类sf::RenderWindow *
(带window_.get()
).
当我打电话window_->getPosition()
给MainMenu
它报告正确的位置时,所以getPosition()
本身并没有错.当我从同一范围(主要)中调用它时,这是唯一的错误.
顺便说一句,我正在使用SFML 2.3.1
在循环打开后打印窗口位置while (window_->isOpen())
.这意味着窗口已关闭,即您在呼叫时不存在getPosition()
.因此,窗口位置未被"正确"报告也就不足为奇了,因为窗口已经关闭(永久性,因此它没有位置).