2016-04-27 16 views
1

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

+0

Sie sollten das 'unique_ptr' konstruieren und es gleichzeitig initialisieren:' unique_ptr window_ (neues sf :: RenderWindow (sf :: VideoMode (800, 600), "asd", sf: : Stil :: Standard)); '. –

+0

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 –

+0

BTW, es gibt kein 'neues '' RenderWindow'. – edmz

Antwort

6

Sie drucken die Fensterposition nach einer Schleife auf while (window_->isOpen()). Dies bedeutet, dass das Fenster geschlossen ist, d. H. Es ist nicht vorhanden, wenn Sie getPosition() aufrufen. Daher ist es nicht verwunderlich, dass die Fensterposition nicht "korrekt" gemeldet wird, weil das Fenster bereits geschlossen ist (dauerhaft, also keine Position).

+0

Okay, ich bin wirklich zurückgeblieben, danke! –