Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - leandrim

Pages: [1]
1
Fenêtrage / Différence window::setSize et recréer la sf::Window
« le: Décembre 18, 2017, 06:21:52 pm »
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.

Pages: [1]