Forum de la communauté SFML

Aide => Général => Discussion démarrée par: Develog le Mars 29, 2015, 12:47:34 am

Titre: [Résolu]Problème avec les events
Posté par: Develog le Mars 29, 2015, 12:47:34 am
Bonjour,

Je me permet de mettre un post sur le forum car j'ai un soucis avec les events.
Et le problème est donc qu'une fois que j'appuie sur le bouton de la souris il exécute les deux conditions, alors que la touche est relâchée qu'une fois alors que faire pour pallier à ce soucis ? Et éviter que les deux conditions soient appelées, car c'est pour des boutons et si j'appuie je veux pas qu'il y ai un double clic (ou rebond (je crois que c'est ça le terme)).
Merci d'avance 


Voici le code :

if((event->type == sf::Event::MouseButtonReleased) && (event->mouseButton.button == sf::Mouse::Left))
    {
        if (box_GB.contains(worldPos->x, worldPos->y) && activate == false)
        {
            activate = true;
            cout << "true" << endl;
        }
    }


    if((event->type == sf::Event::MouseButtonReleased) && (event->mouseButton.button == sf::Mouse::Left))
    {
        if (box_GB.contains(worldPos->x, worldPos->y) && activate == true)
        {
            activate = false;
            cout << "false" << endl;
        }
    }

Titre: Re : Problème avec les events
Posté par: G. le Mars 29, 2015, 10:07:12 am
Logique.
Tu passes dans tes premiers if, quand tu arrives au second :

if((event->type == sf::Event::MouseButtonReleased) && (event->mouseButton.button == sf::Mouse::Left))
est encore vrai

(box_GB.contains(worldPos->x, worldPos->y)
est encore vrai

et
activate == true
est vrai puisque tu viens de le mettre à true.
Donc ouais tes 2 blocs s'executent.


Pas la peine de vérifier 2 fois qu'une même chose est vraie, surtout si tu veux pas que le  contenu du if se répète :
    if((event->type == sf::Event::MouseButtonReleased) && (event->mouseButton.button == sf::Mouse::Left))
    {
        if (box_GB.contains(worldPos->x, worldPos->y)
        {
            if (activate == false)
            {
                activate = true;
                cout << "true" << endl;
            }
            else
            {
                activate = false;
                cout << "false" << endl;
            }
        }
    }

Et tu peux aussi raccourcir un if (activate == false) en if (!activate)
Et si tu veux juste inverser un booléen, tu peux le faire rapidement sans if comme ça :
activate = !activate;
Titre: Re : Problème avec les events
Posté par: Develog le Mars 29, 2015, 12:12:05 pm
Merci beaucoup, je suis vraiment désolé ^^ J'avais toujours des problèmes bidons ;)