AS3: доступ к глобальным переменным - PullRequest
0 голосов
/ 26 апреля 2010

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

//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 ]

2 голосов
/ 27 апреля 2010

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

Вы можете объявить переменную как 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 голосов
/ 26 апреля 2010

Ваша проблема с компиляцией из-за

public var myNum:int = 24

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

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

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...