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;
}
}
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;