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;
}