Bonsoir tout le monde! (enfin surtout Softevans puisque c'est lui qui aide tout le monde on dirai ! XD)
Bon alors, pour faire simple:
j'ai une valeur pour une int a qui vaut 0 au départ.
Je l'envoie dans une fonction g et selon la manipulation de l'utilisateur, elle renvoie à l'int 0 ou 1.
Selon la valeur de cet int, une autre fonction h, va manipuler par rapport à l'int a, une nouvelle valeur selon ce que fait l'utilisateur : soit -1 ou 0.
On est bien d'accord, théoriquement, ça devrai marcher? (sinon le problème vient de là! XD)
Passons maintenant à ce que j'ai codé :
voici une partie de la fonction "main" qui va appeler la fonction g et h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 if(event.button.button == SDL_BUTTON_RIGHT) objet = ouvrirInventaire(ecran, objet); //Si la valeur renvoyé par la fonction est différent de 0, c'est donc qu'on a un objet: if(objet == 1) //si la valeur de l'objet est de 1, alors c'est l'objet FEU qui est utilisé { oSouris = IMG_Load("feu.png"); //On charge l'icone feu qui va suivre la souris objet = utiliserObjet(objet,lieux); //On teste ce que fait le joueur avec l'objet, et on renvoie la valeure de l'objet pour connaître son état } if(objet == -1) { okFeu = IMG_Load("okFEU.png"); positionOkFeu.x = 420; positionOkFeu.y = 140; }
la fonction g renvoie la valeur au paramètre objet (pas besoin de l'afficher, j'ai vérifié, et le problème ne vient pas de cette fonction)
et maintenant le code de la fonction h (complète)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 int utiliserObjet(int objet, int lieux) { SDL_Surface *okFeu = NULL; SDL_Rect positionOkFeu; int continuer = 1; SDL_Event event; while(continuer) { SDL_WaitEvent (&event); switch(event.type) { if (lieux == 0 && objet == 1) //Si le lieux est celui du départ { case SDL_MOUSEBUTTONDOWN: if((event.button.button == SDL_BUTTON_LEFT) &&(event.button.x <= 360)&&(event.button.x >= 320)&&(event.button.y <= 290)&&(event.button.y >= 260)) //Si on clique gauche sur la pancarte objet = -1; //on n'utilise plus l'objet, et on le retire if((event.button.button == SDL_BUTTON_LEFT) &&(event.button.x >= 360)&&(event.button.x <= 320)&&(event.button.y >= 290)&&(event.button.y <= 260 || (event.button.button == SDL_BUTTON_RIGHT)) //si on clique gauche en dehors de la carte objet = 0; } } } return objet; }
J'aimerai en fait, que objet soit égale soit à 0 ou -1 après cette fonction pour qu'ensuite la fonction "main" puisse faire apparaître une image (pour montrer que ça a marché).
Mais lorsqu'elle appelle cette fonction, la fenêtre reste bloqué à ouvrirInventaire, il m'est impossible de sortir de l'inventaire avec le clique droit ou alors le jeu plante complètement (souris ne bouge plus), mais sinon on peut balader la souris dans l'inventaire.
Merci pour votre aideet bonne soirée
Je tiens à préciser que le programme marche parfaitement sans l'appel de la fonction h!
Partager