Redondance intempestive

Plus d'informations
il y a 5 mois 1 semaine #6786 par janpin
janpin a créé le sujet : Redondance intempestive
Bonjour tlm,

J'ai un problème avec une action conditionnelle intégrée dans la boucle principale d'un programme élémentaire que je fais ("création d'un billard sur lequel glisse un palet" - fait en C++/SFML2).Voici ma partie de programme posant difficulté

while (window.isOpen())

{

Event event;

if (Keyboard::isKeyPressed(Keyboard::A))
{

cout << "Bienvenue" << endl; //action ici donnée à titre d'exemple

}

while (window.pollEvent(event))
{
if (event.type == Event::Closed) window.close();
}
................................
....................................

me donnera , si appui sur "A", cette redondance intempestive:
Bienvenue
Bienvenue
Bienvenue.....etc

alors que , bien entendu, je ne veux qu'une seule action. Cette redondance est-elle liée à SFML et "Event" ? Merci de votre réponse

Connexion pour participer à la conversation.

Plus d'informations
il y a 5 mois 1 semaine - il y a 5 mois 1 semaine #6787 par jay81
jay81 a répondu au sujet : Redondance intempestive
Salut, ;)

Il n'y a pas de tempo dans ton programme, si tu presses la touche A ne serait-ce qu'un quart de seconde, ton programme a le temps de faire une vingtaine de boucles et d'écrire 20 fois "Bienvenue', c'est normal. ;)

Il vaut mieux passer par une variable dédiée (bool toucheA), tester le clavier, la passer à true si on presse A, afficher "Bienvenue" puis passer toucheA à false, et attendre qu'on relâche la touche avant de prendre en compte un autre input. ;)

Le plus simple, pour ce faire, c'est de t'inspirer du code du Big Tuto Rabidja qui gère tout ça. :)

@+
Dernière édition: il y a 5 mois 1 semaine par jay81.
Les utilisateur(s) suivant ont remercié: janpin

Connexion pour participer à la conversation.

Plus d'informations
il y a 5 mois 6 jours #6788 par gondulzac
gondulzac a répondu au sujet : Redondance intempestive
Salut,
pollEvent n'attend pas qu'une touche soit pressée pour faire une action, me semble-t-il.
Avec la sdl il fallait utiliser waitEvent. Maintenant je ne sais plus si cette instruction existe en sfml. C'est déjà loin tout ça...

Connexion pour participer à la conversation.

Plus d'informations
il y a 5 mois 5 jours #6789 par janpin
janpin a répondu au sujet : Redondance intempestive
Merci Jay,
L'utilisation d'une variable dédiée (bool toucheA) avec attribution "true" ou "false" est surement très bien mais j'avoue ne pas savoir comment ,pratiquement, réaliser cela. Ma faible connaissance en c++....!
Par contre j'ai bidouillé cela :
..........................

Event event;

while (window.pollEvent(event))
{
// on regarde le type de l'évènement...
switch (event.type)
{
// fenêtre fermée
case Event::Closed:
window.close();
break;

// touche pressée
case Event::KeyPressed:
if (Keyboard::isKeyPressed(Keyboard::Left))
{
// la touche "flèche gauche" est enfoncée
cout<<"bienvenue"<<endl; // on fait l'action 'cout' une fois et seulement une fois
}
break;

// on ne traite pas les autres types d'évènements
default:
break;
}
}

................................................

Bon ça marche donc, l'explication heu.................. pas de ma part, Par contre je peux répéter l'appui pour ravoir cette action. Pour moi c'est suffisant puisque je cherche ,en fait, à faire des corrections de faible amplitude sur des angles, dans un sens ou dans un autre.
Merci Jay et Gondulzac.Sympa ces réponses rapides.

Connexion pour participer à la conversation.

Temps de génération de la page : 0.335 secondes