J'essaie de créer un mini-jeu où le principe consiste à taper la lettre qui est affichée à l'écran. Taper la bonne lettre fait augmenter notre score ainsi qu'un combo pour pouvoir avoir plus de points. La lettre à taper va changer que la lettre de l'utilisateur soit correcte ou fausse.
J'ai réussi la quasi-intégralité de ce mini-jeu mais je n'arrive pas à régler le problème des répétitions : en fait, si je maintiens une touche (par exemple 'e'), le programme va quand même continuer à créer d'autres lettres. Il suffit donc de maintenir une seule lettre et comme les lettres sont changées toutes les millisecondes, il est très facile de gagner des points.
J'ai donc essayé d'empêcher le joueur de pouvoir maintenir une touche mais en vain. J'ai essayé avec SDL_KEYUP et SDL_EnableKeyRepeat mais cela ne fonctionne pas. Voici mon code source (je suis sous SDL 1.2) :
Ajoute en ligne 27 bis: event.type=SDL_NOEVENT. Ça fait un bout de temps que je n'ai plus utilisé sdl 1.x, mais je pense que cela résoudra ton problème.
- Edité par edgarjacobs 19 janvier 2020 à 20:03:51
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Malheureusement oui, en fait je mets bien SDL_EnableKeyRepeat(0,0) et pourtant je peux quand même maintenir les touches. Je pense que SDL_KEYDOWN ne prend pas en compte le SDL_EnableKeyRepeat alors que les SDL_K oui. Si quelqu'un a la réponse je lui en remercie!
Entretemps, j'ai modifié mon message, j'avais mal lu ton code
En fait, si mes souvenirs sont exacts, si SDL_PollEvent() n'a pas de nouvel event à fournir, la valeur du dernier event reçu n'est pas modifiée, ce qui fait que tu rentres dans le if(....==SDL_KEYDOWN)
- Edité par edgarjacobs 19 janvier 2020 à 20:09:00
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Encore merci! Je ne pensais pas que l'erreur proviendrait de là. Je mets le sujet en résolu.
EDIT : Maintenant le jeu force l'utilisateur à taper une lettre, le compteur ne s'incrémente que si l'on tape une lettre. En fait le temps est bien stocké, mais comme on est obligé d'attendre une touche du clavier, le compteur va s'incrémenter de beaucoup de secondes si l'on attend beaucoup (si on attend 3 secondes sans taper une lettre, le compteur ne va pas augmenter pendant ces 3 secondes, mais dès que la lettre sera tapée, le compteur va augmenter toutes les secondes jusqu'à 3).
Je vais faire avec mais si quelqu'un a une solution à ce problème, je suis preneur.
Il faut vérifier le retour du pollevent. Il s'agît en fait d'une file, et un unique élément est dépilé à l'appel de pollevent.
Pour dépiler le contenu complet de la file, on utilise généralement le pollevent ainsi :
while(SDL_PollEvent(&event))
{
if (event.type)
blablabla;
...
}
Une base correcte de gestion des événements est disponible dans ce tuto. J'utilise personnellement cette méthode que j'ai poussée plus loin.
Pour ton autre problème, il suffit d'incrémenter ton temps en dehors d'un test conditionnel. D'un autre côté quand on besoin de faire des fonctions avec 10 arguments, c'est signe qu'on a mal pensé un truc...
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Bonhomme !! | Jeu de plateforme : Prototype.