2010-04-26 15 views
0

Je suis confondu avec le terme "global" dans AS3. Dans ma classe de contrôleur principal, j'ai défini une variable (myNum) à laquelle je voudrais accéder dans tous les fichiers .as de la classe dans le même paquet.AS3: Accès aux variables globales

//Controller class 

package myApp 
{ 
public var myNum:int = 24; //try to access myNum in mySprite class 

public class Main extends Sprite 
    { 
    } 
} 

______________________________ 

//Object class 

package myApp 
{ 
public class mySprite extends Sprite 
    { 
    trace (myNum); 
    } 
} 

le code ci-dessus renvoie l'erreur suivante:

5006: An ActionScript file can not have more than one externally visible definition 

quelle est la bonne façon de mettre en place une liste de variables globales accessibles tout au long de l'ensemble du périmètre d'un ensemble? problème

Répondre

2

Les variables statiques pourraient accomplir ceci.

Vous pouvez déclarer une variable comme internal static afin que d'autres classes dans le même package puissent l'utiliser. Ou vous pouvez le déclarer comme public static afin que toutes les classes de votre projet puissent l'utiliser, même si elles sont dans un package différent.

Dans le code ci-dessous, myNum1 est accessible par classes dans le même package, tandis que myNum2 est accessible depuis n'importe où.

package myApp 
{ 
    public class Main extends Sprite 
    { 
     internal static var myNum1:int = 1; 
     public static var myNum2:int = 2; 
    } 
} 

Exemple d'accès à partir du même paquet:

package myApp 
{ 
    public class ClassInSamePackage 
    { 
     public function doSomething():void 
     { 
      trace(Main.myNum1); // traces 1 
      trace(Main.myNum2); // traces 2 
     } 
    } 
} 

Exemple d'accès à partir d'un autre paquet:

package otherApp 
{ 
    import myApp; 

    public class ClassInDifferentPackage 
    { 
     public function doSomething():void 
     { 
      trace(Main.myNum1); // error! 
      trace(Main.myNum2); // traces 2 
     } 
    } 
} 

interne est en fait le modificateur d'accès par défaut dans AS3, l'écriture si internal static var est identique à l'écriture static var. Mais il est probablement préférable d'écrire internal static var de toute façon juste pour être clair. PS Votre exemple ne permet pas de savoir si vous avez placé les deux classes dans un ou deux fichiers, ce qui n'est pas clair. Si vous avez placé les deux dans un seul fichier, gardez à l'esprit qu'un fichier AS ne peut contenir qu'une seule classe.

2

Votre compilation est parce que

public var myNum:int = 24 

doit être défini dans la classe principale, pas à l'extérieur de celui-ci.

Si vous voulez faire une variable globale, une façon de faire qui est le déclarer statique comme ceci:

package myApp 
{ 

public class Main extends Sprite 
    { 
    public static var myNum:int = 24; //try to access myNum in mySprite class 
    } 
} 

puis accéder à partir d'autres classes comme ceci:

import myApp.Main; //don't need this line if accessing from same package 
trace(Main.myNum);