2016-04-27 3 views
1

sf::RenderWindow::getPosition() всегда возвращает 0, 0 вместо правильного положения, когда я вызываю его из той же области, в которой создается окно.std :: unique_ptr, мешающий определенным функциям sf :: RenderWindow?

Вот пример кода, который воспроизводит проблему:

#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()).

Когда я звоню window_->getPosition() от MainMenu, он сообщает о правильном положении, поэтому getPosition() сам по себе не неисправен. Это неправильно, когда я вызываю это из той же области (в основном).

Я использую SFML 2.3.1 кстати

+0

Вы должны построить 'unique_ptr' и инициализировать его в одно и то же время:' unique_ptr window_ (новый sf :: RenderWindow (sf :: VideoMode (800, 600), "asd", sf: : Стиль :: По умолчанию)); '. –

+0

Я знаю, но это всего лишь пример кода. В моей реальной игре 'unique_ptr' является переменной-членом класса, и я построю окно позже –

+0

BTW, нет необходимости иметь' новый' 'RenderWindow'. – edmz

ответ

6

Вы печатаете положение окна после цикла на while (window_->isOpen()). Это означает, что окно закрыто, то есть оно не существует, когда вы вызываете getPosition(). Поэтому неудивительно, что положение окна не сообщается «правильно», потому что окно уже закрыто (постоянно, поэтому оно не имеет позиции).

+0

Хорошо, я действительно отсталый, спасибо! –

Смежные вопросы