Je voudrais savoir quelle est la méthode pour faire marcher plusieurs événements en même temps, car avec la méthode de M@teo, on ne peut faire marcher qu'un événement à la fois
Oui, ce serais une bonne idée.. je ne sais pas comment on fait parce que par exemple,
là on ne peut bouger une surface que dans un seul sens...
Si quelqu'un a une idée.
A priori SDL_WaitEvent ne va renvoyer qu'un seul évènement. Mais comme la boucle while va très vite, le prochain évènement sera traité et ainsi de suite. Bref, les évènements seront toujours traités un à un, mais au final ça ne se voit pas parce que ça va très vite.
A moins que vous ne parliez de déplacer une surface dans 2 directions à la fois (en haut à droite ?)
Dans ce cas c'est une technique (toute conne) qui sera enseignée dans quelques chapitres). Voici ce que vous devez faire :
- si KEYDOWN du la flèche vers le haut : mettre le booléen flecheHautEnfoncee à 1.
- si KEYDOWN du la flèche vers la droite : mettre le booléen flecheDroiteEnfoncee à 1.
Ensuite, vous regardez ce que valent les booléens. Si vous avez :
if (flecheHautEnfoncee && flecheDroiteEnfoncee )
Alors vous déplacez Zozor de 1px en haut à droite.
Ensuite, il ne faut pas oublier de désactiver les booléens lorsqu'on a un évènement KEYUP :
- KEYUP de flèche haut : flecheHautEnfoncee = 0
- KEYUP de flèche droite : flecheDroiteEnfoncee = 0
Merçi M@teo2 !!! C'est très pratique !!
Et ça marche !!!(c'est mieu ;))
EDIT: Aie !
J'ai un probleme: si j'appuie sur le touche droite, que j'ajoute celle du haut puis que l'enleve, le personnage s'arrete au lieu !!
Comment faire ?
Moui...ce n'est pas comme cela que j'ai fait, tu ne veut pas passer tout ton Main parce que j'arrive pas à le faire fonctionner..
Moi j'utilise ça comme boucle d'evenements:
devildante: Je comprends pas pourquoi tu te compliques la vie à tester si flêche haut & flèche gauche puis flêche bas & flêche gauche, etc, puis ensuite les cas ou une seule flêche est enfoncée, etc...
Il suffit de tester les booléens un par un et de modifier les coordonnées... Si par exemple flêche haut et flêche droite sont enfoncées, les deux booléens vaudront 1, et alors on test flêche haut qui nous dit que c'est bon, on décrémente en y, puis on test flêche droite qui nous dit que c'est bon, on incrémente en x...
Au final les deux valeurs auront changées, et on blit aux nouvelles coordonnées...
[EDIT:] J'ai fait un code basé sur le mouvement de zozor de M@téo21 du cours, je fais les test si les touches haut/bas/gauche/droite, sont enfoncées, puis j'incrémente ou décrémente chacune des ordonnées suivant qui est pressé:
while(!continuer) {
temps = SDL_GetTicks();
SDL_PollEvent(&event); switch(event.type) { case SDL_QUIT:
continuer = 1; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE:
continuer = 1; break; case SDLK_UP:
haut = 1; break; case SDLK_DOWN:
bas = 1; break; case SDLK_LEFT:
gauche = 1; break; case SDLK_RIGHT:
droite = 1; break; } break; case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_UP:
haut = 0; break; case SDLK_DOWN:
bas = 0; break; case SDLK_LEFT:
gauche = 0; break; case SDLK_RIGHT:
droite = 0; break; } break; }
A noter: Je test !continuer dans ma boucle, c'est pas pour être rebel et pas faire comme tout le monde, mais parceque je trouve plus logique que continuer soit à 1 pour dire qu'on continue... Enfin je trouve que c'est plus clair comme ça alors j'ai pris cette habitude contrairement à M@té021...
Bah essayes avec mon code de bouger à droite ET à gauche, Zozor ne bougera tout simplement pas puisque son abscisse est d'abord décrémentée puis réincrémentée, donc au moment du Blit la position reste celle de départ et tout va bien...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)