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

Partagez | 
 

 [résolu]fonction

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: [résolu]fonction   Lun 29 Sep 2014 - 14:38

bonjours

un truc que je comprend pas bien , c'est créer une fonction;  je veux faire deux fonction (par exemple)
Une pour afficher des objets l'autre pour effacer.
Dans le header j'ais mis:
Code:
// Main header script - this will be included into every script in
// the game (local and global). Do not place functions here; rather,
// place import definitions and #define names here to be used by all
// scripts.
import function afficher(objet);
import function effacer(objet);

Dans le global script:
Code:
function afficher(objet)
{
  objet.Transparency=100 ;
  Wait(1) ;
  objet.Transparency=90 ;
  Wait(1) ;
  objet.Transparency=80 ;
  Wait(1) ;
  objet.Transparency=70 ;
  Wait(1) ;
  objet.Transparency=60 ;
  Wait(1) ;
  objet.Transparency=50 ;
  Wait(1) ;
  objet.Transparency=40 ;
  Wait(1) ;
  objet.Transparency=30 ;
  Wait(1) ;
  objet.Transparency=20 ;
  Wait(1) ;
  objet.Transparency=10 ;
  Wait(1) ;
  objet.Transparency=0 ;
  Wait(1) ;
}
function effacer(objet)
{
  objet.Transparency=0 ;
  Wait(1) ;
  objet.Transparency=10 ;
  Wait(1) ;
  objet.Transparency=20 ;
  Wait(1) ;
  objet.Transparency=30 ;
  Wait(1) ;
  objet.Transparency=40 ;
  Wait(1) ;
  objet.Transparency=50 ;
  Wait(1) ;
  objet.Transparency=60 ;
  Wait(1) ;
  objet.Transparency=70 ;
  Wait(1) ;
  objet.Transparency=80 ;
  Wait(1) ;
  objet.Transparency=90 ;
  Wait(1) ;
  objet.Transparency=100 ;
  Wait(1) ;
}

Je voudrais que objet(dans la fonction) soit remplacer au lancement de la fonction par l'objet selectionner par exemple une image un logo : afficher.Logo() ;   ou logo est l'objet a afficher/effacer
pour eviter de taper des lignes repetitif je dois pas bien faire  car ça marche pas et en plus ça plante
(j'espere que j'ais ete assez clair)

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)


Dernière édition par hanakin le Mar 4 Aoû 2015 - 8:23, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu]fonction   Lun 29 Sep 2014 - 15:22

Salut hanakin,

Je pense que tu n'es pas loin du but. J'avais posté un message décrivant les fonctions personnalisées il y a fort fort longtemps (que valoulef a consciencieusement recensé dans cette liste).
Le code que tu as proposé contient tout d'abord un petit problème : tu ne spécifies pas le type du paramètre de ta fonction (la variable objet réfère-t-elle à un personnage, un objet, un GUI ? AGS n'a aucun moyen de le savoir puisqu'il ne parle pas notre langue et est incapable d'analyser le nom de variable objet). Il faut donc spécifier que objet est un nom pour une variable de la classe Object (dans l'importation et dans la déclaration) :
Code:
import function afficher(Object* objet);
import function effacer(Object* objet);
Puis :
Code:
function afficher(Object* objet)
{
  // ...

function effacer(Object* objet)
{
Ensuite, avec le code que tu as proposé, ces fonctions ne seraient pas des méthodes, c'est-à-dire qu'on ne pourrait pas les utiliser après le nom d'un objet suivi d'un point, mais plutôt comme ça : afficher(Logo); ou effacer(Logo);.
Si tu veux en faire des méthodes pour la classe Object, il va falloir changer légèrement la déclaration des paramètres de la fonction (encore une fois, aussi bien dans l'importation que dans la déclaration), comme ceci :
Code:
import function afficher(this Object*);
import function effacer(this Object*);
Puis :
Code:
function afficher(this Object*)
{
  this.Transparency=100 ;
  // ...

function effacer(Object* objet)
{

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: fonction   Lun 29 Sep 2014 - 15:52

Merci kitai de ta reactivité j'en etait pas tres loin mais je tournais en rond je vais tester car cela pourra me servir pour differente chose repetitive

J'avais vu un truc du genre sur le site anglais mais mon etoile etait pas au bon endroit
       import function afficher(this* Object);
       import function effacer(this* Object);

Merci

J'ai utiliser la 2eme solution P... ça m'ennerve ça marche au poil

Si ça peux servir je met ça en dessous
Header:
Code:
import function afficher(this Object*);
import function effacer(this Object*);
GlobalScript:
Code:
function afficher(this Object*)
{
  this.Transparency=100 ;
  Wait(3) ;
  this.Transparency=90 ;
  Wait(3) ;
  this.Transparency=80 ;
  Wait(3) ;
  this.Transparency=70 ;
  Wait(3) ;
  this.Transparency=60 ;
  Wait(3) ;
  this.Transparency=50 ;
  Wait(3) ;
  this.Transparency=40 ;
  Wait(3) ;
  this.Transparency=30 ;
  Wait(3) ;
  this.Transparency=20 ;
  Wait(3) ;
  this.Transparency=10 ;
  Wait(3) ;
  this.Transparency=0 ;
  Wait(3) ;
}
function effacer(this Object*)
{
  this.Transparency=0 ;
  Wait(3) ;
  this.Transparency=10 ;
  Wait(3) ;
  this.Transparency=20 ;
  Wait(3) ;
  this.Transparency=30 ;
  Wait(3) ;
  this.Transparency=40 ;
  Wait(3) ;
  this.Transparency=50 ;
  Wait(3) ;
  this.Transparency=60 ;
  Wait(3) ;
  this.Transparency=70 ;
  Wait(3) ;
  this.Transparency=80 ;
  Wait(3) ;
  this.Transparency=90 ;
  Wait(3) ;
  this.Transparency=100 ;
  Wait(3) ;
}
Lancer la commande (Logo) etant un objet:
Code:
Logo.afficher() ;

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: fonction   Lun 29 Sep 2014 - 17:02

J'y pense comme j'ai des wait dans ma fonction je peux peut-etre aussi definir la valeur du wait

Et oui ça marche
Code:
import function afficher(this Object*,int X);
import function effacer(this Object*,  int X);
Code:
function afficher(this Object*,int X)
{
  this.Transparency=100 ;
  Wait(X) ;
  this.Transparency=90 ;
  Wait(X) ;
  this.Transparency=80 ;
  Wait(X) ;
  this.Transparency=70 ;
  Wait(X) ;
  this.Transparency=60 ;
  Wait(X) ;
  this.Transparency=50 ;
  Wait(X) ;
  this.Transparency=40 ;
  Wait(X) ;
  this.Transparency=30 ;
  Wait(X) ;
  this.Transparency=20 ;
  Wait(X) ;
  this.Transparency=10 ;
  Wait(X) ;
  this.Transparency=0 ;
  Wait(X) ;
}
function effacer(this Object*, int X)
{
  this.Transparency=0 ;
  Wait(X) ;
  this.Transparency=10 ;
  Wait(X) ;
  this.Transparency=20 ;
  Wait(X) ;
  this.Transparency=30 ;
  Wait(X) ;
  this.Transparency=40 ;
  Wait(X) ;
  this.Transparency=50 ;
  Wait(X) ;
  this.Transparency=60 ;
  Wait(X) ;
  this.Transparency=70 ;
  Wait(X) ;
  this.Transparency=80 ;
  Wait(X) ;
  this.Transparency=90 ;
  Wait(X) ;
  this.Transparency=100 ;
  Wait(X) ;
}
Code:
Logo.afficher(10) ;

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: fonction   Sam 4 Oct 2014 - 13:08

Bonjours
J'ai bien compris comment creer une fonction pour un objet mais il y aurait-t-il deja un post sur les fonctions ou comment creer une fonction pour un gui , un caractere , ou une fonction simple a rappeler sans parametres suplementaire.

j'ai rechercher (function fonction ) le site m'affiche pas grand chose la dessus

Merci d'avance

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu]fonction   Sam 4 Oct 2014 - 13:35

hanakin a écrit:
J'ai bien compris comment creer une fonction pour un objet mais il y aurait-t-il deja un post sur les fonctions ou comment creer une fonction pour un gui , un caractere , ou une fonction simple a rappeler sans parametres suplementaire.
La démarche à suivre pour créer une fonction propre aux personnages, aux interfaces, ... est exactement la même que celle pour les objets. Par exemple on peut regarder la fonction Revolution que j'explique dans ce sujet, qui se trouve dans la liste des tutoriels établie par valoulef (on pourrait aussi regarder la fonction FaceDirection de Billbis dans ce sujet également listé par valoulef, mais sa fonction est un peu plus complexe) :
Code:
function Revolution(this Character*) {
  this.FaceLocation(this.x - 2, this.y);
  Wait(10);
  this.FaceLocation(this.x, this.y - 2);
  Wait(10);
  this.FaceLocation(this.x + 2, this.y);
  Wait(10);
  this.FaceLocation(this.x, this.y + 2);
  Wait(10);
}
Cette fonction n'exige aucun paramètre externe, c'est-à-dire qu'elle s'appelle directement sur une instance de personnage (on dit alors que c'est une méthode de la classe Character) et qu'on ne passe aucune valeur entre parenthèses, comme ça : cEgo.Revolution();.
La logique sera exactement la même pour les interfaces. Par exemple une fonction qui ne prend pas de paramètre externe et qui permute l'affichage d'une interface :
Code:
function Permute(this GUI*) {
  if (this.Visible) this.Visible = false;
  else this.Visible = true;
}
Un exemple de fonction qui prend des coordonnées en paramètres externes et qui déplace progressivement l'interface vers ces coordonnées :
Code:
function GlisseVers(this GUI*, int x, int y) {
  int dx = 1, dy = 1;
  if (x < this.X) dx = -1;
  if (y < this.Y) dy = -1;
  while (this.X != x && this.Y = y) {
    if (this.X != x) this.X += dx;
    if (this.Y != y) this.Y += dy;
    Wait(1);
  }
}

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: fonction   Sam 4 Oct 2014 - 14:12

C'est dingue j'avais finalement bien fait

Code:
Header
import function EffacerMessage(this Gui*);


Code:
function EffacerMessage(this Gui*) {
         Wait(80);
        gStatusline.Visible=false;
        TextStatusLIne.Text="" ;
}

Appel de la fonction (Gui:Statusline)
Code:
gStatusligne.EffacerMessage();

Mais ça marche  pas et j'arrive pas a comprendre pourquoi ???
J'ai surement une boulette quelques parts j'ai essayer differente chose depuis 1/2 heure sans resultats, je seiche....

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu]fonction   Sam 4 Oct 2014 - 15:05

Tu arrives à compiler ce code ? J'imagine que non, puisque tu écris "Gui" avec un 'u' et un 'i' minuscule, et ce terme n'a pas de sens intrinsèque pour AGS. Remplace par GUI et ça devrait tourner.
De plus, en l'état le code dans ta fonction EffacerMessage n'utilise jamais this, ce n'est donc pas très utile d'en faire une méthode de la classe GUI : ta fonction concerne Statusline seulement, tu peux donc en faire une fonction générale :
Code:
function EffacerMessage() {
  Wait(80);
  gStatusline.Visible = false;
  TextStatusline.Text=""; // J'ai aussi remplacé les L et I majuscules par des l et i minuscules ici
}
Assure-toi de bien toujours avoir soit "line", soit "Line", soit "ligne", soit "Ligne" dans les noms de tes éléments, parce que là tu alternes (à un endroit tu écris TextStatusLIne et ailleurs tu écris TextStatusligne)

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Re: [résolu]fonction   Sam 4 Oct 2014 - 17:47

Non effectivement je n'arrive pas a compiler , meme pas lancer le jeux

Mais lorsque que je mets en  commentaire:
Code:
//gStatusline.EffacerMessage();
le jeux se lance
Precision TextStatusLIne est juste le nom du labeltext que j'ai mis dans le Gui
Statusline

J'ai corriger les u et i de gui en majuscule (ah la synthaxe )
sans resultat donc juste en fonction generale cela devrait donner ça
GlobalScript.ash
Code:
import function EffacerMessage();
GlobalScript.ash GlobalScript.asc(pour lancer la fonction)
Code:
EffacerMessage();
La fonction elle meme
Code:

function EffacerMessage() {
     Wait(80);
       gStatusline.Visible=false;
       TextStatusLIne.Text="" ;
{

toujours le pb
erreur:
Code:
GlobalScript.asc(759): Error (line 759): Already referenced name as import; you must define it before using it

la ligne 759 correspond a ça:
Code:

function EffacerMessage() {

Apres differents  essais je pense que c'est l'appel de fonction
EffacerMessage();
qui pose souccis car en commentaire // tout ce passe bien

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)


Dernière édition par hanakin le Dim 5 Oct 2014 - 10:07, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu]fonction   Dim 5 Oct 2014 - 4:05

hanakin a écrit:
GlobalScript.ash (pour lancer la fonction)
Code:
EffacerMessage();
Tu places cette instruction dans l'en-tête (fichier .ash) ? Il ne faut pas faire ça, et comme tu le remarques c'est de là que vient ton problème de compilation. N'utilise cette instruction que là où tu veux vraiment t'en servir (après avoir affiché un message, donc). Si tu veux la lancer dès le début du jeu, alors place-la dans une fonction game_start.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: re fonction   Dim 5 Oct 2014 - 9:54

Non excuse moi c'est une erreur d'ecriture le EffacerMessage(); est bien dans le globalscript.asc j'ai mal ecrit mon message (tient pour preuve  regarde l'erreur est bien dans le globalscript.asc)
HE dire que les fonction doivent permettre de moins perdre de temps , j'en perd et j'en fait perdre au autres....

C'est pourtant pas une grosse fonction qui est toute simple en plus , je ne comprend pas...

Je remet une precision lorsque que ma commande est active:EffacerMessage();
GlobalScript.asc(766): Error (line 766): Already referenced name as import; you must define it before using it
la 766 c'est function EffacerMessage();
Lorsque qu'elle est ignoré: //EffacerMessage();
Pas d'erreur ??

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu]fonction   Dim 5 Oct 2014 - 11:33

OK, j'ai l'impression que ta ligne EffacerMessage(); est plus haut dans le script que l'endroit où tu définis cette fonction. AGS ne permet pas ce genre de choses : la définition de la fonction doit se trouver plus haut dans le script que toute utilisation de cette fonction.

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: function resolu   Dim 5 Oct 2014 - 18:53

T'avais raison ...

J'ai fait l'inverse la fonction je l'ai mis tout en haut du globalscript
et là ça marche ????

Encore mieux j'ai cree un nouveau script.

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2430

Date d'inscription : 01/08/2006


MessageSujet: Re: [résolu]fonction   Dim 5 Oct 2014 - 20:08

hanakin a écrit:
Encore mieux j'ai cree un nouveau script.
À ce propos, il faut bien faire attention à l'ordre des scripts.

PS : hanakin, j'ai pris la liberté de supprimer ton message "voir plus bas".

_________________
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
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: FONCTION   Dim 5 Oct 2014 - 20:19

TU AS BIEN FAIT POUR LE MESSAGE CAR JE N'AVAIS PAS LA MAIN POUR LE SUPPRIMER

Bon eh bien puisque tout marche j'ai fait un export du script
que l'on peut trouver ici

cela permet d'afficher/effacer progressivement un gui ou objet
je l'ais mis aussi dans Ressources a telecharger si ça peut servir... grand sourire

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Contenu sponsorisé




MessageSujet: Re: [résolu]fonction   Aujourd'hui à 19:50

Revenir en haut Aller en bas
 
[résolu]fonction
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

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: