Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu]Problème avec les events  (Lu 2092 fois)

0 Membres et 2 Invités sur ce sujet

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
[Résolu]Problème avec les events
« 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;
        }
    }

« Modifié: Mars 29, 2015, 12:27:28 pm par Develog »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème avec les events
« Réponse #1 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;
« Modifié: Mars 29, 2015, 10:08:54 am par G. »

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Problème avec les events
« Réponse #2 le: Mars 29, 2015, 12:12:05 pm »
Merci beaucoup, je suis vraiment désolé ^^ J'avais toujours des problèmes bidons ;)