Problème avec la gestion d'évenement en SDL (à mon avis)
SirThanos
Messages postés1Date d'inscriptiondimanche 18 janvier 2009StatutMembreDernière intervention 5 mai 2010
-
5 mai 2010 à 20:33
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 2012
-
6 mai 2010 à 19:05
Bonjour,
Ca fait un petit moment que je n'avance plus dans mon code car j'ai un probléme, à mon avis, venant du SDL_EVENT.
Je suis en train de faire un Mario Sokoban (un TP proposé sur le Site Du Zero), il est putôt finit, et j'aimerai l'améliorer.
Donc j'ai voulu faire un menu, qui ressemble plus à un menu de jeu, c'est à dire qu'on choisi "l'action que l'on veut faire" avec les touche HAUT, BAS, et ENTRER (et DROITE et GAUCHE au pire).
Je peux me déplacer dans le menu, et faire entrer et tout vas bien... le seul souci c'est quand le jeu commence. Les touches HAUT et BAS garde leur fonction de "menu", alors que je voudrais qu'elles (les touches) prennent la fonction de jeu (comme déplacer le personnage). Donc en gros quand j'appuis sur DROIT ET GAUCHE il se passe rien... Et quand j'appuis sur BAS, ça m'améne au menu Quitter.
Pour essayer de résoudre le probléme je me suis dit qu'il fallait changer le nom de la variable SDL_EVENT, mais ça n'a rien changer...
J'vous laisse le main.c et le jeu.c j'pense que les autres n'ont rien à voir avec le probléme ...
Si vous pouvez m'aidez ou me mettre sur le bon chemein, je prends =)
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 6 mai 2010 à 19:05
Le problème est que les touches du menu principale sont activées dans la même boucle que celle de la fonction jouer. Donc quand tu passe à "jouer", le programme exécute les instructions des touches du menu principale avant celle du jeu , puis zappe celles du jeu car les touches ne sont plus activés... Donc, une solution serait de placer un boolean qui différencierait le menu du jeu.
Du genre :
bool Menu = 1; /* Indique qu'il est dans le menu */
while(continuer)
{
...
if (Menu) /* Ne contole le clavier pour le menu que si il est dedans. */
{
switch(eventMenuPrincipale.type)
{
case SDL_QUIT:
...
break;
}
switch(eventMenuPrincipale.key.keysym.sym)
{
case SDLK_ESCAPE:
...
break;
case SDLK_DOWN:
...
break;
case SDLK_UP:
...
break;
case SDLK_RETURN:
switch (menuPosition)
{
case 0:
continuer = 0;
break;
case 1:
jouer(ecran); /* Passe dans "jouer" */
Menu = 0; /* Indique que ce n'est plus le menu */
break;
default:
...
break;
}
default:
...
break;
}
}
}
Voilà, à mon avis cela devrait éliminer le problème.
(Il faut surtout placer le boolean au dessus du while pour qu'il ne se remette pas à 1.)