2010-04-26 3 views
0

Я смущен термином «глобальный» в AS3. в моем основном классе контроллера я определил переменную (myNum), которую я хотел бы получить во всех файлах класса .as в одном пакете.AS3: Доступ к глобальным переменным

//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); 
    } 
} 

приведенный выше код возвращает следующую ошибку:

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

что такое правильный способ создать список глобальных переменных, которые могут быть доступны в течение всего объема пакета?

ответ

2

Статические переменные могли бы выполнить это.

Вы можете объявить переменную как internal static, чтобы другие классы в одном пакете могли ее использовать. Или вы можете объявить его как public static, чтобы все классы в вашем проекте могли его использовать, даже если они находятся в другом пакете.

В приведенном ниже коде myNum1 можно получить по классам в одном пакете, тогда как myNum2 можно получить из любого места.

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

Пример доступ из одного пакета:

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

Примера доступа из другой упаковки:

package otherApp 
{ 
    import myApp; 

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

Внутренних фактически модификатор доступа по умолчанию в AS3, так что написание internal static var такой же как документ static var. Но, вероятно, лучше написать internal static var в любом случае, чтобы быть чистым.

PS Непонятно из вашего примера, разместили ли вы два класса в одном или двух файлах. Если вы поместили их только в один файл, помните, что один AS-файл может содержать только один класс.

2

Ваша проблема компиляции, потому что

public var myNum:int = 24 

должен быть определен в главном классе, а не за его пределами.

Если вы хотите, чтобы сделать его глобальную переменную, один из способов сделать это декларирует его статичным, как так:

package myApp 
{ 

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

, а затем к нему доступ из других классов, как так:

import myApp.Main; //don't need this line if accessing from same package 
trace(Main.myNum); 
Смежные вопросы