En fait je veux quitter mon programme qui est en boucle, par exemple en cliquant ou en appuyant sur une touche.
Je sais pas commet faire ! aidez moi merci.
Tu veux savoir comment gérer les touches ou tout simplement sortir par exemple d´un while?
Si c´est le dernier cas c´est avec
break;
Hé ben il faut que je sache faire les deux ^^ !
et si je met break, je le met ou ?
Bon alors, si tu veux sortir d´un simple while:
while(...) //condition de la boucle
{
//instructions
break; //sort de la boucle
//tu peux l´utiliser dans une condition:
if(...) break;
//après tu peux mettre d´aurtes instructions
}
Pour la SDL, le tuto de Jean-Yves-Yves, pour t´app
rendre à gérer les évènements...
Donc ensuite dans ton code tu mets:
while(1) //boucle infinie
{
/*si la touche est appuyée*/ break;
//autres instructions
}
if(...) break;
oui d´accord mais quesque je met apré if pour expliquer que j´appuie sur n´importe quelle touche ?
Ben regarde sur le tuto de JYY, tu as pas mal de trucs pour gérer le clavier avec SDL...
J´ai pas le temps de te faire un code exemple maintenant, donc peut-être demain, sinon:
http://perso.numericable.fr/~fvirtman/info/tuto/index.html

Bon, voilà un moyen de gérer les touches.
Il faut d´abord initialiser avec la fonction Init_AppuiTouche.
void Init_AppuiTouche(void)
{
// Traduction UNICODE
SDL_EnableUNICODE(1);
// Répétition des touches
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
SDL_DEFAULT_REPEAT_INTERVAL+50);
}
//fonction d´appui des touches
bool Appui_Touche(string touche)
{
string touche_clavier;
// Traitement des commandes
while(SDL_PollEvent(&event))
{
// Type d´évènement
switch(event.type)
{
case SDL_KEYDOWN:
// Si on presse une touche
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
touche_clavier = "ESCAPE";
break;
case SDLK_LEFT:
touche_clavier = "LEFT";
break;
case SDLK_RETURN:
touche_clavier = "RETURN";
break;
case SDLK_UP:
touche_clavier = "UP";
break;
case SDLK_DOWN:
touche_clavier = "DOWN";
break;
case SDLK_RIGHT:
touche_clavier = "RIGHT";
break;
}
break;
// Si on relache une touche
case SDL_KEYUP:
break;
// Fermeture du programme
case SDL_QUIT:
return 0;
}
}
if (touche_clavier == touche)
{
return TRUE;
}
else
{
return FALSE;
}
}
Bon, c´est les touches les plus utilisés pour la S
DL...
Ensuite, dans le main, tu mets:
while (!AppuiTouche("ESCAPE"))
{
//instructions
}
Pour par exemple sortir de la boucle dès que ´Esc´
est appuyée.
Bon, je n´ai pas testé, donc je ne suis pas sûr que ça marche, notamment pour:
if (touche_clavier == touche)
Je ne sais pas si on peut comparer deux strings comme ça...
Arf, apparemment, quelques erreurs dans mon code...
Désolé, pas le temps de corriger...
![]()
personnelement je trouve que les fonction de Jyy sont vachement pratique !
char intern_key[400];
void UpdateKeys()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
intern_key[event.key.keysym.sym]=1;
break;
case SDL_KEYUP:
intern_key[event.key.keysym.sym]=0;
break;
}
}
}
int Key(int sdlcode)
{
int ret=intern_key[sdlcode];
return ret;
}
/*apres dans ton main tu fais une boucle comme ca*/
while(!Key(SDLK_ESCAPE))
{
UpdateKeys();
}
/* la si tu appuye sur la touche echap tu sort de ta boucle voila apres chacun fais comme il veut !
*/
solution plus simple :
while(1)
{
SDL_PollEvent(&event);
if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
break;
}
c´est tout ^^ et ca marche quand on appuye sur enter !
Il est vrai que ma fonction UpdateEvents ne dit pas si une touche quelconque vient d´etre appuyée.
Mais une petite modif, et ça se rajoute facilement
La solution que te propose farfadetsan est bien, par contre, elle ne s´accierai pas a mon UpdateEvents() qui boufferait la file tout seul, ce qui rendrait le truc hasardeux...
"La solution que te propose farfadetsan"
lol farfadetsan c´est moi !! !
euh je comprend pas trop pourquoi tu dit que mon truc est hasardeux, il marche trés bien....
Non, je n´ai pas dit que ta solution est hasardeuse ![]()
J´ai dit que si tu la couples avec la solution du UpdateEvents() que j´utilise, alors la, c´est hasardeux ![]()
Mais ta solution seule est correcte ![]()
ok merci.
encore une question : comment je fait pour controler un etouche indépendament ?? ?
ex : if( j´appuye sur une touche )
{....}
avec les fonction de JeanYvesYves apres tu a juste a faire :
if(Key(ici tu met le nom de la touche a tester))
et apres tu met au moins une fois dans ta boucle UpdateEvents() et apres c´est tranquil ! ![]()
regarde, dans mon tuto, l´exemple qui s´appelle "2.A.2 Promenade" (cf ma carte)
Ouvre juste le fichier main.cpp et regarde comme je controle les touches ![]()
Un UpdateEvents() et ensuite, comme disais Dromar34, un if (Key(...))
Tu trouveras l´implémentation de UpdateEvents dans le fichier futils.cpp
au fait, c´est pas main.cpp mais exe.cpp ![]()
Autrement, si tu ne veux pas utiliser SDL (bon je sais que tu le veux, mais si tu ne connais pas ce que je vais te dire, ça peut t´intéresser), en C, avec stdlib (je crois), tu peux utiliser la fonction getch() pour gérer le clavier (enfin pas tout, juste les touches pour écrire).
De cette façon:
int main(int argc, char** argv[])
{
char touche;
printf("Trouvez la bonne touche pour sortir du programme\n");
while(1)
{
touche = getch();
if (touche == ´q´) break;
/*si on tape ´q´, le programme s´arrête*/
printf("rate\n");
}
return 0;
}