Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 variable globales version 3.2

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: variable globales version 3.2   Mer 11 Avr 2012 - 2:57

alors, voila je fais tout les tutos du net mais le prob c'est qu'ils sont anciens et des trucs ne fonctionnent plus........ alors voila

j'aimerai faire : premier clic sur hotspot look cEgo.say(" c'est un arbre"); et deuxieme click c'est un chene....

quelqu'un pourait m'expliquer clairement merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: variable globales version 3.2   Mer 11 Avr 2012 - 3:21

Bonjour jetsetwilly.
Avant tout tu peux aller faire un tour dans la section Présentation des membres pour nous dire un peu qui tu es ^^

Les variables globales existent toujours dans la version 3.2 d'AGS : il existe un onglet Global Variables qui te permet de les déclarer.

L'implémentation après est assez simple.
Dans la pièce où se trouve ton arbre, tu sélectionnes le hotspot correspondant à ton arbre et dans sa liste d'événements (icône orange/jauen en forme d'éclair), tu cliques sur la ligne "Look at Hotspot" de façon à ouvrir l'éditeur de script pour la pièce en cours.
Dans la fonction où tu te trouves alors, qui vient de se créer et qui correspond à ce qui s'exécute lorsque le joueur clique sur l'arbre en mode Regarder, tu mets un code comme le suivant, en admettant que tu as nommé ta variable globale Nb_clics_arbre :
Code:
if (Nb_clics_arbre == 0)
    cEgo.Say("C'est un arbre");
else if (Nb_clics_arbre == 1)
    cEgo.Say("C'est un chêne");
else
    cEgo.Say("Bon on a compris maintenant...");
Nb_clics_arbre++;
Ainsi, au début du jeu la variable globale Nb_clics_arbre vaut 0 et alors c'est le premier message qui s'affiche. Puisque le if a été validé, ni le else if ni le else ne sont exécutés, par contre Nb_clics_arbre++; s'exécute bien et alors cette variable prend la valeur 1.
Au clic suivant alors, le if n'est pas validé mais le else if oui : le message affiché est le second. Le else n'est pas validé (donc pas exécuté) et Nb_clics_arbre++; a pour effet d'augmenter encore la variable, qui prend alors la valeur 3.
Au troisième clic donc, ni le if ni le else if ne sont validés et c'est alors le troisième message, dans le else, qui s'affiche. Là encore la variable va augmenter et va valoir 4.
De cette façon si tu as besoin d'encore plus de messages, tu peux rajouter des else if entre ton deuxième message et le else.

J'espère avoir été assez clair et ne pas avoir fait d'erreur (je n'utilise quasiment jamais les variables globales).

Bonne chance !

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: Re: variable globales version 3.2   Mer 11 Avr 2012 - 13:44

suite


Dernière édition par jetsetwilly le Mer 11 Avr 2012 - 14:58, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: Re: variable globales version 3.2   Mer 11 Avr 2012 - 13:46

function hHotspot1_Look()
{
cEgo.Walk(251, 382, eBlock, eWalkableAreas);
cEgo.FaceLocation(286, 300, eBlock);
if (nb_clicks == 1)
cEgo.Say("merde");
else if (nb_clicks == 2)
cEgo.Say("shit");
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: Re: variable globales version 3.2   Mer 11 Avr 2012 - 14:17

c'est bon j'ai reussi il le dis dans l'ordre a present me suis trompé dans le code c'est:
function hHotspot1_Look()
{
cEgo.Walk(251, 382, eBlock, eWalkableAreas);
cEgo.FaceLocation(286, 300, eBlock);
if (nb_clicks == 0)
cEgo.Say("merde");
else if (nb_clicks == 1)
cEgo.Say("shit");
else
cEgo.Say("amen");
nb_clicks++;
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: Re: variable globales version 3.2   Mer 11 Avr 2012 - 14:28

Merci , je vois qu'il y a des gens qui s'y connaissent ici c'est bien.......

ok ok je debute sur le logiciel je m'attaque ax variable et c'est pas de la tarte pour coder tout sa

donc voila j'aimerai d'autre precisions
comment boucler ce dialogue? qu'il disent les 3 phrases en boucle toujours?
comment integrer une anim quand ego dis merde?
difference entre global variable et les autres(que je ne connai pas encore) et quand et comment les utiliser?
les fonctions setglobalint et getglobalint sont obsoletes dans ags3.2? je vois beaucoup de choses qui ne correspondesnt plus sur les tutos et c'est dommage, comme la partie audio qui a changé et qui reste assez floue a comprendre...

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: variable globales version 3.2   Mer 11 Avr 2012 - 21:05

jetsetwilly a écrit:
comment boucler ce dialogue? qu'il disent les 3 phrases en boucle toujours?
Il suffit de remettre la variable à 0 après que le dernier message est prononcé.
Ta fonction ressemblera donc à ça :
Code:
function hHotspot1_Look()
{
  cEgo.Walk(251, 382, eBlock, eWalkableAreas);
  cEgo.FaceLocation(286, 300, eBlock);
  if (nb_clicks == 0)
    cEgo.Say("merde");
  else if (nb_clicks == 1)
    cEgo.Say("shit");
  else {
    cEgo.Say("amen");
    nb_clicks = -1;
  }
  nb_clicks++;
}
J'ai mis nb_clicks = -1; dans le else en prévision du nb_clicks++; qui va s'exécuter ensuite. De cette façon, à la fin la variable vaudra -1 + 1 = 0. Au prochain clic donc, c'est le if du début qui sera exécuté.

jetsetwilly a écrit:
comment integrer une anim quand ego dis merde?
Il suffit d'utiliser la commande Animate.
Si je mets à jour le code précédent, ça peut donner quelque chose comme ça :
Code:
function hHotspot1_Look()
{
  cEgo.Walk(251, 382, eBlock, eWalkableAreas);
  cEgo.FaceLocation(286, 300, eBlock);
  if (nb_clicks == 0) {
    cEgo.LockView(5);
    cEgo.Animate(cEgo.Loop, 1, 0, eNoBlock);
    cEgo.UnlockView();
    cEgo.Say("merde");
  }
  else if (nb_clicks == 1)
    cEgo.Say("shit");
  else {
    cEgo.Say("amen");
    nb_clicks = -1;
  }
  nb_clicks++;
}

jetsetwilly a écrit:
difference entre global variable et les autres(que je ne connai pas encore) et quand et comment les utiliser?
les fonctions setglobalint et getglobalint sont obsoletes dans ags3.2?
Tout d'abord il me semble qu'en effet ces commandes sont obsolètes. Mais bizarrement je n'ai pas l'impression que ce soit signalé dans le fichier d'aide. (La version française de l'aide en ligne n'est pas à jour, je n'ai pas fini de mettre à jour, loin de là)

La différence est assez subtile en fait, mais je vais essayer d'expliquer globalement (hahaha).
Une variable globale, dans le sens où on l'utilise, c'est-à-dire les variables que tu déclares dans l'onglet Global variables de l'éditeur, sont des variables accessibles à travers tout le jeu. C'est-à-dire que si tu donnes mettons la valeur 5 à une variable globale dans une pièce et que tu regardes ensuite la valeur de cette variable alors que tu es dans une autre pièce, la valeur sera toujours 5.
C'est pourquoi c'est intéressant dans ton cas : si la variable que tu utilises était effacée lorsqu'on quitte la pièce, à chaque nouvelle entrée dans cette pièce le premier clic lancerait le message "merde", même si tu avais déjà cliqué une seule fois auparavant (puisque tu aurais quitté la pièce entre-temps).

Il existe d'autres types de variables qu'on peut appeler globales, mais dans un sens un peu différent. On pourrait en fait établir une hiérarchie de globalité/localité.
Comme tu as pu le voir, avec AGS tu écris ton code de programmation dans des fichiers séparés (un fichier par pièce par exemple, plus le fichier GlobalScript et ceux d'autres modules éventuellement).
Une variable déclarée tout en haut d'un de ces fichiers (à l'extérieur d'une fonction en fait) sera accessible depuis n'importe quelle fonction contenue ensuite dans ce fichier, mais seulement dans ce fichier. Donc si tu déclares une variable tout en haut du fichier script de ta pièce numéro 1, tu ne pourras pas y accéder dans le script de ta pièce numéro 2. A moins d'utiliser les mots-clés export et import.
Je te laisse consulter ce sujet où j'explique certaines nuances à ce propos.

Enfin le type le plus local de variables qui soit sont les variables que tu déclares à l'intérieur d'une fonction. Ces variables ne seront jamais qualifiée de globales. Elles ne seront accessibles qu'à l'intérieur de la fonction où elles ont été déclarées et n'existeront pas dans les autres fonctions, même si celles-ci se trouvent dans le même fichier.
C'est-à-dire que si tu déclares une variable que tu appelles bof dans une fonction A et que tu déclares une variable que tu appelles aussi bof dans une fonction B, leurs valeurs seront totalement indépendantes. En gros, puisqu'elles sont déclarées à l'intérieur des fonctions, ce sont deux variables totalement différentes, même si tu les appelles avec le même nom. C'est un peu comme si le nom de ta variable était un prénom et que la fonction où tu déclares cette variable était le nom de famille qui te permet de distinguer les deux personnes qui ont le même prénom : lorsque tu agis sur une personne, tu n'agis pas sur l'autre, même si elles ont le même prénom.

J'espère que c'est assez clair. Si la dernière métaphore t'embrouilles plus qu'autre chose, oublie-la et essaie de relire attentivement ce que j'ai écrit. N'hésite pas à ouvrir un nouveau sujet sur la question si ça te parait encore obscure.

jetsetwilly a écrit:
je vois beaucoup de choses qui ne correspondesnt plus sur les tutos et c'est dommage, comme la partie audio qui a changé et qui reste assez floue a comprendre...
Oui ça c'est vrai, certains changements récents, dont la partie audio, ne sont pas à jour dans les tutoriaux, ni sur l'aide française. C'est tout simplement parce que nous sommes peu nombreux et manquons de temps pour suivre l'évolution du logiciel ^^
Là encore, il faut, comme tu le fais, poser directement tes questions sur le forum pour voir si des gens peuvent t'aider sur le sujet.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: Re: variable globales version 3.2   Jeu 12 Avr 2012 - 13:25

merci de ton aide, vraiment c'est deja plus clair,
j'avance bien,j'ais fais 3 room et j'y installe des objets et des persos là j'peux tester des trucs. mon perso peut deja interagir avec le decor parler dialoguer ouvrir des portes et meme se frotter aux variables....... pas mal pour un bleu lol
au lieu de if else et if else si je met 3 fois if j'ai vu qu'on est completement dans les choux,
peut m'expliquer l'importance des if else et esle if

peut tu me donner un exemple comment coder les autres variables? avec des int et des bool je suppose
pour la question des variables globales: dans un jeux point and click les varriables sont toutes globales non?
a part quelques exeption, comme des minijeux qui se reinitialise quand on sors de la map
des portes des animations.... enfin je vois pas quoi d'autre

sinon a part les anims les variables les deplacement qu'y a t'il d'interressant a faire avec lescript d'ags
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: variable globales version 3.2   Jeu 12 Avr 2012 - 21:10

jetsetwilly a écrit:
au lieu de if else et if else si je met 3 fois if j'ai vu qu'on est completement dans les choux,
peut m'expliquer l'importance des if else et esle if
On utilise souvent, par fainéantise, une suite de if là où il serait plus juste d'utiliser des else if.
Mais imagine par exemple que tu veuilles afficher un message différent au joueur si son score est supérieur à 100, s'il est supérieur à 50, à 25 ou inférieur à 25. Tu pourrais vouloir faire comme ça dans un premier temps :
Code:
if (game.score < 25)
  Display("Tu manques cruellement d'expérience, petit scarabée !");
if (game.score > 25)
  Display("Pas mal pour un bleu, mais ça reste un peu court jeune homme !");
if (game.score > 50)
  Display("Waoh, c'est que tu commences à prendre du galon !");
if (game.score > 100)
  Display("Te voici devenu un véritable maître !");
Seulement ce code a un sérieux problème. Si le joueur a moins de 25 points, pas de soucis, le premier if est exécuté et les autres ne le sont pas. S'il a entre 25 et 50 points, pas de problème non plus, seul le second if sera exécuté. Mais imagine maintenant que le joueur a dépassé les 50 points. Le premier if n'est pas exécuté car le joueur n'a pas moins de 25 points, en revanche le second if est exécuté : le joueur a plus de 50 points, il a donc aussi plus de 25 points. Bien sûr le troisième if aussi est exécuté car le joueur a aussi plus de 50 points. Il y aura donc deux messages qui vont s'afficher ! Et si le joueur a même dépassé les 100 points, ce seront trois messages qui s'afficheront ! C'est dans ce genre de situations que les else if sont intéressants. Le code suivant aura l'effet désiré :
Code:
if (game.score > 100)
  Display("Te voici devenu un véritable maître !");
else if (game.score > 50)
  Display("Waoh, c'est que tu commences à prendre du galon !");
else if (game.score > 25)
  Display("Pas mal pour un bleu, mais ça reste un peu court jeune homme !");
else
  Display("Tu manques cruellement d'expérience, petit scarabée !");
Que signifie ce code ?
Eh bien il affiche le premier message si le joueur a plus de 100 points. Sinon (c'est-à-dire s'il a moins de 100 points), alors il affiche le second message à condition qu'il ait plus de 50 points ; mais si cette seconde condition n'est pas remplie non plus, alors si le joueur a plus de 25 points, on affiche le troisième message. Enfin, si aucune de ces conditions n'est remplie (c'est-à-dire si le joueur n'a ni plus de 100, ni plus de 50, ni plus de 25 points, c'est-à-dire si le joueur a moins de 25 points) alors c'est le dernier message qui est affiché.
Pratique ces else if et else, non ?

jetsetwilly a écrit:
peut tu me donner un exemple comment coder les autres variables? avec des int et des bool je suppose
pour la question des variables globales: dans un jeux point and click les varriables sont toutes globales non?
a part quelques exeption, comme des minijeux qui se reinitialise quand on sors de la map
des portes des animations.... enfin je vois pas quoi d'autre
Qu'est-ce que tu appelles les "autres" variables ? Même si en passant par l'onglet Global variables, tu ne vois pas les mots-clés int ou bool, en réalité ils sont utilisés par le moteur, de façon "cachée".
Dans le langage d'AGS, à chaque fois que tu déclares (que tu "crées") une variable, tu dois spécifier son type (int, bool, etc.), quel que soit le niveau de localité de cette variable.
Ce qui va définir le niveau de localité de cette variable, c'est l'endroit où tu écris cette ligne de déclaration. Par exemple si tu fais ça :
Code:
int maVariable = 5;
function Ajoutee() {
  maVariable++;
  return maVariable;
}

function hHotspot1_Look() {
  if (Ajoutee() == 6) Display("En voici 6 !");
}
Lorsque le joueur regardera le hotspot 1 pour la première fois, le message s'affichera car maVariable vaudra 5+1 = 6. Mais s'il regarde à nouveau (en restant dans la pièce), le message ne s'affichera plus car cette fois la variable vaudra 6+1 = 7.
En revanche si tu fais ça :
Code:
function Ajoutee() {
  int maVariable = 5;
  maVariable++;
  return maVariable;
}

function hHotspot1_Look() {
  if (Ajoutee() == 6) Display("En voici 6 !");
}
Alors le message s'affichera chaque fois que le joueur regardera le hotspot 1.
Pourquoi ? Parce qu'ici, la variable maVariable est locale à la fonction Ajoutee, c'est-à-dire que cette variable est créée lorsque tu utilises la fonction Ajoutee, mais qu'elle est effacée tout de suite après. Ce qui veut dire que lorsque le joueur regarde le hotspot 1 pour la première fois, maVariable est créée avec la valeur 5, on lui ajoute 1 et elle vaut alors 6 et donc la condition du if est validée. Mais maVariable est tout de suite effacée car ça y est, tu as fini d'utiliser la fonction Ajoutee.
Lorsque le joueur va à nouveau regarder le hotspot, tout va recommencer "à zéro" : la fonction est à nouveau utilisée, donc la variable est à nouveau créée avec la valeur 5, etc.

Au contraire, dans le premier exemple, la variable est déclarée hors de la fonction, au-dessus, et donc elle n'est pas locale à la fonction (elle est locale à la pièce du fichier script en revanche). Cela signifie que la variable est créée lorsque tu entres dans la pièce et qu'elle ne sera effacée que lorsque tu quitteras la pièce. Du coup, tant que le joueur reste dans la pièce, chaque fois qu'il regarde le hotspot 1, la fonction Ajouee est utilisée et elle augmente la valeur de maVariable, qui n'est jamais effacée. Et donc seulement la première fois qu'on augmente cette variable vaut-elle 6. Après elle vaudra 7, 8, 9, ...
Mais si tu quittes la pièce et que tu entres à nouveau, en toute logique, alors la variable sera effacée et recréée avec la valeur 5 et un premier nouveau clic affichera le message.
Tu me suis à peu près ?

Je répète que toutes ces questions de localité valent quel que soit le type de la variable (int, bool, float, String, ...).
Le type de variable n'a d'intérêt qu'en fonction de ce que tu veux faire (utiliser des nombres entiers, utiliser un état on/off, utiliser des nombres à virgule, utiliser du texte, ...).

Voilà, c'était assez long encore une fois mais j'espère avoir été clair.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
jetsetwilly
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 60

Age : 40

Localisation : alsace

Date d'inscription : 06/04/2012


MessageSujet: Re: variable globales version 3.2   Jeu 12 Avr 2012 - 23:32

[img][/img]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: variable globales version 3.2   Aujourd'hui à 19:14

Revenir en haut Aller en bas
 
variable globales version 3.2
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» variable globales version 3.2
» Installation version numérique DISQUE6
» Jeux Naomi et version Dreamcast
» Afficher une variable sur l'écran
» Nombre d'une variable

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: