Bonjour,
C'est mon premier poste sur ce forum donc j'espère être dans la bonne section.
J'essaie dans l'application que je développe actuellement de mettre en place un système qui permetrait a l'utilisateur de changer la résolution de l'appli, mais je me heutre a un petit problème :
en effet lorsque je tente de modifier la fenêtre avec la fonction sf::window::setSize([...]) la fenêtre change bien, mais je ne comprend pas le comportement des choses qui sont afffichées à l'interieur.
Un petit code minimal pour comprendre mon problème :
int main()
{
sf::RenderWindow win(sf::VideoMode(800, 600), "SFML minimal code");
sf::RectangleShape rect(sf::Vector2f(50, 50));
sf::Clock clock;
sf::Event ev;
bool oneTime = true;
rect.setFillColor(sf::Color::Green);
clock.restart();
while (win.isOpen())
{
if (clock.getElapsedTime() >= sf::seconds(5) && oneTime)
{
// l'utilisateur demande de changer la resolution ( simulé ici au bout de 5 secondes )
oneTime = false;
win.setSize(sf::Vector2u(1000, 750));
// l'autre possibilité : win.create(sf::VideoMode(1000, 750), "sfml minimal");
}
while(win.pollEvent(ev))
{
if (ev.type == sf::Event::Closed)
win.close();
}
rect.setPosition(win.getSize().x / 2 - 25, win.getSize().y / 2 - 25);
win.clear(sf::Color::Black);
win.draw(rect);
win.display();
}
return 0;
}
Le problème ici c'est qu'après le resize de la fenêtre, le carré n'est plus du tout au milieu, pourquoi ?
La solution que j'ai trouvé pour palier a ce probleme est de recrée la fenetre avec de nouveau parametre via :
win.create(sf::VideoMode(1000, 750), "sfml minimal");
Mais au final, quelle différence entre sf::Window::setSize() et sf::Window::create ? que fait réellement setSize() ?
Merci d'avoir pris le temps de lire ce poste,
je reste dispo pour toute questions.
Lean.