Il faut absolument que le
if (event.type == sf::Event::TextEntered) soit à l'intérieur du
while (window.pollEvent(event)), c'est une certitude. (sans sleep)
Il ne faut utiliser les events que lorsqu'il y a un événement, et c'est forcément à l'intérieur de la boucle d'événement, sinon tu l'utilises quand il n'y a pas d'événement et du coup ça répéte tout seul ta lettre.
Bref, n'utilise jamais d'événement en dehors de la boucle d'événements.
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
}
else if (event.type == sf::Event::TextEntered)
{
// tout ton code relatif au textentered
}
}
Remate bien le
tuto, la lettre tapée est contenue dans event.text.unicode, tu n'as pas besoin de vérifier chaque lettre pour savoir laquelle c'est avec une série de if infinies, tu peux directement l'ajouter à ton text.
txt.setString(txt.getString() + event.text.unicode);
Si tu veux vérifier que event.text.unicode est un chiffre ou une lettre avant de l'ajouter tu peux utiliser
std::isalnum, et pour tes caractères un peu spéciaux là tu peux comparer directement ouais.
if (event.type == sf::Event::TextEntered)
{
if (std::isalnum(event.text.unicode) || event.text.unicode == '-' || event.text.unicode == ' ' || event.text.unicode == '|')
{
txt.setString(txt.getString() + event.text.unicode);
}
}
Essaie d'améliorer progressivement ton truc pour bien comprendre chaque étape, mais je suis à peu près certain que déplacer ton code à l'intérieur de la boucle d'évènement (et virer le sleep) permettra d'écrire normalement