Gros soucis SDL ...... argh [Résolu]

Signaler
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005
-
The_Sin
Messages postés
43
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
4 février 2006
-
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

Messages postés
43
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
4 février 2006

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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu n'aurais pas oublié quelques break par hasard?
Et ton case SDLK_ESCAPE: ne semble pas faire grand chose...
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005

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
Messages postés
43
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
4 février 2006

Re,

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

t'as bien mis exit(0) ; ?
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
"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
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005

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
Messages postés
43
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
4 février 2006

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>