2010-11-24 7 views
0

Je conçois un site web flash et je l'ai orienté objet. J'ai beaucoup de cours et j'ai de la difficulté à accéder aux informations (variables) d'autres classes. Pour cela, j'inclue généralement la variable aux paramètres des fonctions (ou du constructeur) de ma classe OU je crée des objets d'événement personnalisés qui transporteront les variables dans une autre classe (qui les écoute). Ces méthodes sont lentes. Je sais qu'il existe des variables locales (déclarées à l'intérieur d'une fonction et disponibles uniquement pour cette fonction) et des variables globales (déclarées dans une classe comme privées ou publiques et disponibles dans cette classe). Puis-je, d'une façon ou d'une autre, créer une sorte de variables «superglobales» qui sont disponibles pour l'ensemble du programme flash? Si ce n'est pas le cas, connaissez-vous un moyen de transmettre des variables dans une conception OOP?Variables OOP 'SuperGlobal' pour actionscript?

Merci! Je vais essayer de mettre en place un singleton.

+0

Expliqué la classe statique dans ma réponse. –

Répondre

0

Singleton Classe:

package { 

    public class SingletonDemo { 
     private static var instance:SingletonDemo; 
     private static var allowInstantiation:Boolean; 

     public static function getInstance():SingletonDemo { 
     if (instance == null) { 
      allowInstantiation = true; 
      instance = new SingletonDemo(); 
      allowInstantiation = false; 
      } 
     return instance; 
     } 

     public function SingletonDemo():void { 
     if (!allowInstantiation) { 
      throw new Error("Error: Instantiation failed: Use SingletonDemo.getInstance() instead of new."); 
      } 
     } 
    } 
} 

Je pense que je reçois maintenant. Merci!

+0

Vous pouvez également vérifier directement la variable 'instance'. Ainsi, au lieu d'avoir une variable supplémentaire «allowInstantiation», dans votre constructeur, vérifiez simplement «if (! Instance) {...}». – martineno

0

Habituellement on le fait avec une classe singleton qui contient des variables qui peuvent être utilisées partout. Faire une classe par exemple appelée "Environnement", "Paramètres" ou "Programme", qui contient des variables statiques, chaque classe peut alors y accéder via Settings.soundIsMuted, par exemple.

+0

Wow. Je n'ai jamais pensé à ça. Une classe statique est une classe qui n'utilise pas de constructeur? Aussi, pensez-vous que je devrais le faire maintenant que mon site Web est avancé? Ces variables sont-elles simplement "public var x"? – Loop

+0

Pourriez-vous me montrer un tutoriel? Je sais trop vaguement commencer à utiliser des singletons. – Loop

2

N'a PAS à être quelque chose comme singleton. La solution est assez simple:

package sg { 
    public class SuperGlobal { 
     public static var vars:Array = new Array(); 
    } 
} 

Où que vous soyez dans votre code, vous pouvez accéder à la vars tableau avec ceci:

sg.SuperGlobal.vars["test"] = "Hello World!"; 

// somewhere else: 
trace(sg.SuperGlobal.vars["test"]); // Hello World!