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 кстати
Вы должны построить 'unique_ptr' и инициализировать его в одно и то же время:' unique_ptr window_ (новый sf :: RenderWindow (sf :: VideoMode (800, 600), "asd", sf: : Стиль :: По умолчанию)); '. –
Я знаю, но это всего лишь пример кода. В моей реальной игре 'unique_ptr' является переменной-членом класса, и я построю окно позже –
BTW, нет необходимости иметь' новый' 'RenderWindow'. – edmz