Forum de discussion
Forum « Flash et Shockwave » (archives)
Re: Prototypes et Classes AS1
Envoyé: 17 juillet 2004, 9h12 par dada
Peut-être ta façon de faire n'est pas très judicieuse, çà reste à vérifier ;-)
Personellement, je ne suis pas un pro des classes en AS1, au moment où je commençais à les comprendre, je suis passé à l'AS2 :) mais j'ai quand même fait un gros truc en AS1 et je te conseille d'utiliser les prototypes pour construire tes classes, c'est comme çà que çà se fait en AS1. Et le fonctionnement n'en est que plus puissant.
Quand tu construit une classe avec la commande 'new' tu peux passer à cette classe le nom d'ocurence d'une autre classe pour qu'elle puisse y accéder, comme j'ai fait avec la classe PERSO et le 'param_OccMap', nom d'occurence de la classe MAP. J'aurais aussi pu le faire dans la classe MONDE : plutôt que d'y construire directement lePerso et laMap, on pourrait les construire à l'extérieur de la classe et passer les noms d'occurence à MONDE dans le constructeur. Cà permettrait peut-être plus de facilités, ce sera à toi de voir ;-)
Donc, voilà un petit exemple qui construit 3 classes : MONDE, MAP et PERSO. On construit MONDE, qui construit (en son sein) MAP et PERSO. PERSO peut ramasser un objet et le garder dans sa poche, du coup MAP perd un objet. On peut récupérer le nombre d'objets avec les fonctions GetNobjets de MAP et PERSO.
----------------------------------
// =déclaration============== classe MAP ================= //
MAP = function (param_Nobjets) { // Constructeur
this.Nobjets= param_Nobjets; // on initialise le Nbr d'objets dans la Map
}
// -- ENLEVER OBJET -- //
MAP.prototype.EnleverObjet = function () { // fonction
this.Nobjets-= 1;
}
MAP.prototype.GetNobjets = function () { // fonction
return this.Nobjets; // on retourne le nombre d'objets restant dans la map
}
// =déclaration=============== classe PERSONNAGE ================ //
PERSO = function (param_OccMap) { // Constructeur
this.OccMap= param_OccMap; // OccMap est la référence à l'occurence de la classe Map
// maintenant qu'on l'a passée en paramètre et enregistrée dans l'occ Perso, on peut
// y accéder.
this.Nobjets= 0; // on initialise le Nbr d'objets pour le perso
}
// -- PRENDRE OBJET -- //
PERSO.prototype.PrendreObjet = function () { // fonction
trace ('\r---> le personnage prend un objet\r');
this.Nobjets+= 1; // le personnage gagne un objet
this.OccMap.EnleverObjet(); // la map perd un objet
}
PERSO.prototype.GetNobjets = function () { // fonction
return this.Nobjets; // on retourne le nombre d'objets dans les poches du personnage
}
// =déclaration================= classe MONDE ================= //
MONDE = function (param_Nobjets) { // Constructeur
this.laMap= new MAP (param_Nobjets); // Création de l'occurence de la Map
this.lePerso= new PERSO (this.laMap); // Création de l'occurence du perso
}
// =Création de l'occurence =======MONDE============ //
leMonde= new MONDE (10);
// =Exécution du code=
trace ('Objets restants dans la map : '+leMonde.laMap.GetNobjets());
trace ('Objets dans les poches du perso : '+leMonde.lePerso.GetNobjets());
leMonde.lePerso.PrendreObjet();
trace ('Objets restants dans la map : '+leMonde.laMap.GetNobjets());
trace ('Objets dans les poches du perso : '+leMonde.lePerso.GetNobjets());
----------------------------------
Tant que les différentes occurences de classe savent où trouver les autres occurences de classe, elles peuvent être intéractives. Quand aux prototypes, je ne sais pas si tu les utilisent, c'est un moyen de créer de vraix classes (ou presque;), propres et 'étanches' au niveau des variables et des fonctions :-D
Si tu veux des précisions, n'hésite pas, je suis à fond dans les classes en ce moment ;)
++
dada
Réponses
|