Gros soucis SDL ...... argh

Résolu
courjete Messages postés 11 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 16 décembre 2005 - 2 déc. 2005 à 21:12
The_Sin Messages postés 43 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 4 février 2006 - 4 déc. 2005 à 13:43
Alors voila, je me met à la programmation en c++ et dans une volonté de
tester mes connaissances, préparer des fonctions d'affichage, je
cherche à faire un programme tout simple qui me permet de déplacer un
cadre sur un image. Je travaille sous SDL, mon programme réussit à
faire déplacer le cadre de gauche à droite et de haut en bas mais la
touche que j'ai configurer pour quitter ne fonctionne pas Ce qui est
plutot embetant ;-)

En fait n'importe quelle touche reproduit le comportement de ma touche
pour quitter (échap) et elle ne quitte pas, elle fait déplacer mon
cadre un peu aléatoirement et quitte après de nombreux déplacements.

Voici ma fonction :



int touchesdir () {

while (1) {

while (SDL_PollEvent(&event)) {


if (event.type == SDL_KEYDOWN) {


switch (event.key.keysym.sym) {





case SDLK_UP: m-=20;


posimod (m,n);


case SDLK_DOWN: m+=20;


posimod (m,n);


case SDLK_RIGHT: n+=20;


posimod (m,n);


case SDLK_LEFT: n-=20;


posimod (m,n);


case SDLK_ESCAPE: break;


}


return 0;


}

}

}



}



sachant que posimod est une fonction qui modifie la position de mon
cadre en relançant cette fonction (touchesdir)
après modification de la position.

Aidez moi s'il vous plait....

courjete

8 réponses

The_Sin Messages postés 43 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 4 février 2006
3 déc. 2005 à 23:59
Salut,

Quand tu quittes ta fonction et que tu reviens à main, tu as bien des
SDL_Quit ; ? ... parce que sinon c'est normal que ça ne quitte
pas correctement.



...

case SDLK_ESCAPE: Quit() ;

...



void Quit()

{

SDL_FreeSurface(sEcran) ;

SDL_FreeSurface(sTonCadre) ;

SDL_Quit() ;

exit(0) ;

}



voilà fait appel à une fonction qui s'occupe de tout quitter parce que
comme le dit vecchio56 ton SDLK_ESCAPE ne fait pas vraiment grand chose.
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 déc. 2005 à 21:34
Tu n'aurais pas oublié quelques break par hasard?
Et ton case SDLK_ESCAPE: ne semble pas faire grand chose...
0
courjete Messages postés 11 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 16 décembre 2005
4 déc. 2005 à 11:42
alors alors, je n'ai pas mis de break car comme je lançais une fonction
,je me suis dis que ça n'etai pas utile mais je vais essayer. Par
contre, pour ce qui est de mettre une fonction qui quitte la SDL
après SDL_ESCAPE, j'y ai pensé et je l'ai fais.... Gros probleme, ça
quitte la SDL, mais pas le programme .....lol

Donc c'ets pas top. Mais c'ets vrai que les break, j'y avais pas pensé, je pense que ça pourrai m'aider. merci

courjete
0
The_Sin Messages postés 43 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 4 février 2006
4 déc. 2005 à 11:46
Re,

ça quitte la SDL, mais pas le programme ..... >>> comment ça

t'as bien mis exit(0) ; ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
courjete Messages postés 11 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 16 décembre 2005
4 déc. 2005 à 12:06
non, effectivement, j'ai jamais mis exit (0).
Et ça fonctionne.
merci bocou, mon dernier souci est que n'importe quelle touche quitte
le programme à part les touches directionnelles.
courjete
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 déc. 2005 à 12:09
"alors alors, je n'ai pas mis de break car comme je lançais une fonction ,je me suis dis que ça n'etai pas utile"

Aucun rapport
0
courjete Messages postés 11 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 16 décembre 2005
4 déc. 2005 à 12:20
ok, merci bien, par contre, j'avais bien SDL_Quit dans mon main,
j'avais pas vu la question, mais normalement ça devrait quitter sans la
jolie fonction Quit que m'a offert The_sin. Enfin bon ,ça fonctionne
mieu et ça n'ets qu'un essai de programme pour que je me familiarise
avec la SDL.

courjete
0
The_Sin Messages postés 43 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 4 février 2006
4 déc. 2005 à 13:43
Tu fais directement exit() ; sans liberer les surfaces et quitter la
sdl ? Moi je te conseille dans tes progs sdl de faire un fonction
Init() et une autre Quit(), comme ça dès que tu as besoin de quitter tu
fais appel à Quit() ; .



Un exemple ( en C ) :



<sub>SDL_Surface *sEcran ;



void Quit()

{

SDL_FreeSurface(sEcran) ;

SDL_Quit() ;

exit(0) ;

}



void Init()

{

//Initialisation de SDL video et de l'écran

if(SDL_Init(SDL_INIT_VIDEO) > 0)

{ printf("Impossible d'initialiser SDL : %s\n", SDL_GetError()) ;

Quit() ;

}

if(!(sEcran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF)))

{ printf("Impossible de paramétrer le mode video : %s\n", SDL_GetError()) ;

Quit() ;

}

}



voilà++

</sub>
0
Rejoignez-nous