Variable globale se réinitialise au changement de scène

Hello!
Voilà un mois que je m’arrache la peau du crâne sur ce problème (je n’ai plus de cheveux à m’arracher depuis longtemps), et j’en viens à me demander, après plusieurs tentatives échouées, si ce n’est pas simplement un bug du programme. Je précise que je bosse sur Windows 7 (sur mon pc) et Windows 8 (sur ma tablette), avec la version “3.1.61” de GD. J’explique:
Je souhaite intégrer un mode “1 joueur” et un mode “2 joueurs” à mon jeu. Pour l’instant je me consacre au solo. Je veux que le joueur puisse choisir son personnage parmi un choix de 3. Pour cela j’ai créé une variable Globale nommée “avatar1” (“avatar2” servira pour le mode “2 joueurs” évidemment) que j’ai mis à zéro:

Ensuite, lorsque le joueur sélectionne un avatar, la variable “avatar1” change de valeur (“1” pour le moine, “2” pour la sportive, “3” pour la détective). Ensuite, le programme teste la nouvelle valeur de la variable “avatar1”, et affiche le personnage demandé. De plus, le programme n’affiche le bouton “valider” QUE si la variable “avatar1” est différente de 0. Jusque là tout marche impèc’:
Mon code:

Si le moine est sélectionné, le personnage animé apparaît à droite, et le bouton “valider” aussi:

Sinon, si la variable “avatar1” est égale à 0:

Le problème, c’est ensuite qu’il apparait. Je crée une nouvelle scène, affichant l’histoire de l’avatar et ses motivations à participer au jeu. Le problème c’est que rien ne s’affiche. Après plusieurs essais, j’ai décidé de tester ma variable “avatar1”, en affichant une phrase si celle-ci est égale à 0, ou une autre phrase si la variable est différente de 0. Et là, surprise, et n’importe comment que je fasse, le résultat est toujours le même: “avatar1=0”…
Le code:


Les lignes 5 et 6 testent la variable, le reste ne sert à rien en l’état (depuis j’utilise des calques, plus propres que tout ce fatras).

Le résultat:


…et là je pleure… :frowning:

Quelqu’un aurait-il une idée? C’est peut-être tout bête comme solution, mais je pense avoir fait le tour de mes possibilités…
D’avance merci.

Déjà, tu peux utiliser la fonction “Debug” et “performance” du ruban pour tracer le comportement de ton projet en temps réel dans tous ses détails.

Ensuite, ta scène histoires est bonne.
Mais ta scène Select1 est chelou.

La scène 1 ne sert à rien car avatar1 est déjà à zéro par défaut.
L’évènement 8 remet ton avartar1 à zéro dès qu’on clique quelque part (fond est en dessous de tes portraits).
Il faudrait aussi l’évènement 17 et suivant pour voir ce qu’il s’y passe.

Perso, je ferai comme ça :

[code]Si curseur touche PortraitAvatar
Si clic gauche de souris alors
avatar1 = PortaitAvatar.animation
AvatarEnGrand.animation = PortaitAvatar.animation
Jouer un son

Si avatar1 >0 alors BoutonValider.animation = 1
Si curseur sur BoutonValider et clic gauche et boutonValider.animation == 1 alors aller à la scène histoires.[/code]

PortaitAvatar est un sprite avec une animation par portait.
AvatarEnGrand est un sprite dont chaque animation est un avatar en pied, l’animation 0 étant une image vide, les autres étant nico, helo et ali. Chaque numéro d’animation correspond à un même numéro d’animation de PortraitAvatar.

Tu crées donc un sprite PortraitAvatar 3 fois, chacun avec un numero d’animation différente, un sprite AvatarEnGrand et un BoutonValider avec deux animations (inactif et actif).

Merci de ta réponse mtarzaim.
“Debug” et “performance” marchent bien pour une scène unique, dans l’aperçu, mais mon problème, c’est justement le changement de scène. Je suis donc obligé de compiler à chaque fois que je veux tester le truc! Et là, ben, plus de “Debug”… :neutral_face:
Dans la scène “select1”:

  • La ligne 1 ne sert effectivement à rien lors d’un premier lancement du jeu. Cela dit, si le joueur termine une partie et veut recommencer, il me faut bien réinitialiser la sélection de personnage. J’aurai pu mettre cette ligne ailleurs (fin de partie, “voulez-vous refaire une partie?”), mais je l’ai mis là pour ne pas l’oublier plus tard. Dans tous les cas, le problème ne vient pas de là, j’ai déjà testé en enlevant cette ligne et le résultat est strictement le même…
  • La ligne 8 remet effectivement “avatar1” à 0, car si l’on clique ailleurs que sur un portrait, le choix précédent s’annule, afin d’éviter de sélectionner un perso “par erreur”.
  • Les lignes 17 et suivantes ne te donneront pas d’indication sur le problème, il s’agit seulement de tester si la souris clique bien sur le bouton “valider”, alors lancement de la scène “histoires”. La variable “avatar1” n’apparaît pas dans ces lignes.
  • Le code que tu donnes ne résoudra pas mon problème je pense. Ma scène “select1” marche très bien, les animations se lancent impeccablement, pas besoin de revoir ça pour l’instant je crois (même si c’est peut-être pas optimisé).
    Ce que je veux comprendre, c’est pourquoi une variable globale dont on modifie la valeur dans une scène (et elle se modifie bien, j’en ai la preuve) se réinitialise-t-elle lors d’un changement de scène.
    Merci.

Ce que je peux te dire, c’est que dans mon cas, les variables globales conservent bien leur valeur d’une scène à l’autre, natif ou web.
Le problème ne peux donc venir que de ton code. Et si ton code ne marche pas, essaie avec un autre algorithme.

D’ailleurs, vérifie quand même si avatar1 garde bien la même valeur en fin de scène avec le debuggeur. Cela pourrait t’aider à déterminer à quel moment du jeu la variable est remise à zéro.

Un détail aussi : puisque le joueur ne peut pas jouer sans avoir sélectionné un avatar, pourquoi lui laisser la possibilité de cliquer en dehors ?
S’il veut un autre avatar, il n’a qu’à cliquer sur un autre portait. Pas besoin de gérer la remise à zéro de avatar1. Tu pourrais même lui mettre un avatar par défaut.

Brdl!!! Je viens de tester ma scène avec le debugger, et je viens de comprendre! Le problème, c’est lorsque je clique sur le bouton “valider”. En effet, je clique donc en dehors d’un portrait, donc ça remet ma variable à 0, logique! Je suis dèg’ d’avoir perdu tout ce temps pour que dalle! Merci beaucoup mtarzaim, tu m’as donné le recul dont j’avais besoin pour voir mon erreur.

[Edith Piaf]
Voilà je viens de virer la ligne “8”, donc une fois qu’on a choisi un perso on peut en changer, mais si on clique sur le décor il reste en mémoire, et donc ma variable reste bien différente de 0 lorsque je clique sur “valider”. Problème résolu! :mrgreen: