Проблемы с доступом к FlashVars через параметры в AS3 - PullRequest
0 голосов
/ 21 сентября 2008

Я получаю ошибки компилятора, когда пытаюсь получить доступ к flashVars в классе AS3.

Вот урезанная версия кода:

package myPackage {
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.display.Sprite;
  public class myClass {
    public function CTrafficHandler() {
        var myVar:String = LoaderInfo(this.root.loaderInfo).parameters.myFvar;}}}

И я получаю ошибку компиляции:

1119: Доступ к возможно неопределенному корню свойства через ссылку со статическим типом источника: myClass.

Когда я изменяю строку класса на

public class myClass extends Sprite {

Я не получаю ошибку компилятора, но я получаю это в окне вывода:

Ошибка типа: ошибка # 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект.

Через отладчик (как предложено) я вижу, что this.root равно нулю.

Как я могу решить эту проблему?

Ответы [ 5 ]

3 голосов
/ 24 ноября 2010

Ваша проблема в том, что ваш DisplayObject не был добавлен в DisplayList, в тот момент, когда вы пытаетесь получить доступ к флэш-переменным. Следовательно, корневой экранный объект равен нулю, в соответствии с вашим объектом.

Вы можете убедиться, что ваш DisplayObject находится на сцене, используя следующее:

package
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class MySprite extends Sprite
    {
        // constructor
        public function MySprite()
        {
            super();
            addEventListener( Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true );
        }

        private function onAddedToStage( event:Event ):void
        {
            removeEventListener( Event.ADDED_TO_STAGE, onAddedToStage );

            var paramList:Object = LoaderInfo( this.root.loaderInfo ).parameters;
            var myParam:String = paramList["myParam"];
        }
    }
}

`

2 голосов
/ 22 сентября 2008

Проблема действительно заключалась в том, что вы пытались получить доступ к этой информации из неэкранного объекта или из-за пределов класса документа. Если вы хотите получить доступ к root или stage, объект, который хочет получить доступ к нему, должен быть сначала добавлен в список отображения.

Я часто использую flashvars для переменных, которые часто используются в проекте. Переменные, такие как страна и язык. Я считаю, что в этом случае лучше всего перехватить эти параметры в классе документа и создать открытые переменные с указанными параметрами в качестве значений. Это даст _global стиль доступа к этим переменным. Тем не менее, вам действительно следует экономно использовать глобальные переменные, особенно при работе над совместными проектами.

2 голосов
/ 21 сентября 2008

Я нашел, в чем проблема. Данный класс был не основным, используемым в проекте, а второстепенным.

Я переместил код в основной класс, чтобы получить параметры, и после того, как я их получил, я отправил их в функцию конструктора класса.

1 голос
/ 21 сентября 2008

В качестве альтернативы вы можете попробовать использовать объект mx.core.Application.application.parameters .

Со страницы LiveDocs для mx.core.Application :

приложение : объект
[статические] [только для чтения] Ссылка на приложение верхнего уровня.

параметры : объект
[только для чтения] Свойство параметров возвращает объект, содержащий пары имя-значение, представляющие параметры, предоставленные для этого приложения.

Существует два источника параметров: строка запроса URL-адреса приложения и значение HTML-параметра FlashVars (это влияет только на основное приложение).

0 голосов
/ 21 сентября 2008

Я думаю, что вы должны выйти из Sprite, но не забудьте сначала инициализировать его и, возможно, поставить на сцену. Попробуйте включить отладку и посмотрите, что именно равно null, как говорится в отчете об исключении.

...