sf::RenderWindow::getPosition()
gibt immer 0, 0
statt der richtigen Position, wenn ich es aus dem gleichen Bereich aufrufen, in dem das Fenster erstellt wird.std :: unique_ptr stört bestimmte sf :: RenderWindow-Funktionen?
Hier ist der Beispiel-Code, der das Problem reproduziert:
#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;
}
Die Sache ist die: Ich zum Beispiel habe eine Klasse MainMenu
, auf die ich ein sf::RenderWindow *
(mit window_.get()
) übergeben.
Wenn ich window_->getPosition()
von MainMenu
rufe meldet es die richtige Position, so getPosition()
selbst ist nicht fehlerhaft. Es ist nur falsch, wenn ich es aus dem gleichen Umfang (in main) anrufe.
Ich SFML 2.3.1 von der Art und Weise mit
Sie sollten das 'unique_ptr' konstruieren und es gleichzeitig initialisieren:' unique_ptr window_ (neues sf :: RenderWindow (sf :: VideoMode (800, 600), "asd", sf: : Stil :: Standard)); '. –
Ich weiß, aber das ist nur ein Beispielcode. In meinem realen Spiel ist die 'unique_ptr' eine Klassenmitgliedsvariable und ich baue das Fenster später –
BTW, es gibt kein 'neues '' RenderWindow'. – edmz