AS2.0 : portée dans gestionnaire écrit dans une classe

AS2.0 : portée dans gestionnaire écrit dans une classe - Flash/ActionScript - Programmation

Marsh Posté le 25-05-2005 à 09:32:22    

Salut,
 
j'ai une classe AS2.0, dans laquelle je veux écrire des gestionnaires d'événements à la volée. Dans ceux-ci je veux invoquer l'instance courante de la classe, mais j'ai un problème de portée, je n'y arrive pas... C'est pas clair ? Je m'explique, avec un bout de code.
 

Code :
  1. class MaClasse
  2. {
  3.   // membres de la classe
  4.   // (...)
  5.   // constructeur
  6.   // (...)
  7.   // une méthode
  8.   public function maFonction():Void
  9.     {
  10.       // (...)
  11.       // ici j'écris le gestionnaire d'événements, par exemple
  12.       // pour un MovieClip dont je connais l'existence sur la scène :
  13.       _root.unClip.onRollOver=function()
  14.         {
  15.           // voilà, c'est ici que je voudrais faire appel à
  16.           // l'instance courante (this) de la classe MaClasse.
  17.           // mais si je fais appel à this ici j'ai l'impression
  18.           // que ça fait référence à _root.unClip...
  19.           // (...)
  20.         }
  21.       // (...)
  22.     }
  23. }


 
J'ai une solution bancale, qui est de faire une classe définissant tout ça pour le movieclip en question, en la rattachant à un symbole (linkage), avec un pseudo-constructeur init() qui me permet de passer l'instance de MaClasse au clip. Mais c'est un peu laborieux pour peu de choses, et surtout pas très souple : déjà ça fait un .as de plus, et en plus j'utilise un compilateur alternatif (www.mtasc.org), donc j'évite au maximum d'ouvrir l'éditeur flash de Macromedia, bien trop lourd (et buggué) pour le développement.
 
Voilà, si quelqu'un a une solution élégante (et légère !), je prends avec grande joie !

Reply

Marsh Posté le 25-05-2005 à 09:32:22   

Reply

Marsh Posté le 26-05-2005 à 14:14:07    

Nan mais je sais pas si tu sais en général comment on utilise des classes... à quoi te sert ta classe "MaClasse" ?? c'est une classe "controleur" qui s'occupe de gérer la base ??
Car mettre un appel à "_root" dans une classe, c'est plutot contre nature...
 
Mais bref, si tu veux faire appel à ton instance de classe dans ton gestionnaire, t'as qu'a déclarer une référence à l'instance juste avant de déclarer le gestionnaire, et normalement, tu y aura accès...
 
par exemple :
 
function maFonction( Void ):Void
{
var owner:MaClasse = MaClasse( this ); // casting pour bien passer une instance de "MaClasse";
 
monObjet.onRollOver = function()
{
trace( owner );
}
}
 
 
mais dans cette histoire, tu ferai mieux de passer "unClip" comme référence et d'avoir une variable dans "MaClasse" qui va accueillir cette référence, car le "_root", c'est vraiment pas dans l'esprit AS2 et/ou POO...
 
Bon courage, a++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed