Как передать переменные из .fla file to .as файл в as3

У меня есть.fla имя файла тест.fla и у меня есть эта переменная в нем:

import Main;

var my_var;

stage.addEventListener(MouseEvent.CLICK, onLoaded);

function onLoaded(e:Event):void
{
 my_var = "Maziar";
 //trace(my_var);
}

У меня есть .как файл называется Main.as.

I want to pass my_var from test.fla к основному.as.

Я буду очень признателен, если вы поможете мне в этом деле!

Заметно, что я использовал метод, упомянутый в » Actionscript 3: pass a variable from the main fla to external as file «, но он не работает для меня!!!

Я написал в своем Main.как:

package 
{
import flash.display.Sprite;
import flash.geom.Point;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;

public class Main extends Sprite
{
    public function Main()
    {
        if (stage)
        {
            init();
        }
        else
        {
            addEventListener(Event.ADDED_TO_STAGE, init);

        }

        addEventListener(Event.ENTER_FRAME, waitForMyVar);
    }

    private function waitForMyVar(e:Event):void
    {
        if (my_var != null)
        {
            trace(my_var);
            removeEventListener(Event.ENTER_FRAME, waitForMyVar);
        }

    }

    private function init(e:Event = null):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
    }
 ...
 }
}

Заранее спасибо!

2 ответа

  1. Используйте статические члены класса.

    public class Main extends Sprite
    {
        static public var globalVar:* = 1;
    
        public function doWhatever():void
        {
            trace(globalVar);
        }
    }
    

    Тогда в ФЛА:

    import Main;
    
    var M:Main = new Main();
    // or use sprite instance of Main
    
    M.doWhatever();
    Main.globalVar = "Hello World!";
    M.doWhatever();
    
  2. Важно отметить, что конструктор Mainв файле документа ActionScript запускается перед кодом, найденным в кадре. При попытке доступа к my_varпеременной в документе AS она еще не была объявлена в кадре.

    Итак, нам нужно дождаться Flash, чтобы запустить кадр. Это можно сделать Event.ENTER_FRAMEс помощью прослушивателя.

    Образец:

    Код Временной Шкалы (.FLA-файл)

    var my_var:String = "my variable";
    

    Код Документа (.как файл)

    package {
        import flash.display.MovieClip;
        import flash.events.Event;
    
        public class Main extends MovieClip {
            public function Main() {
                addEventListener(Event.ENTER_FRAME, waitForMyVar);
            }
    
        private function waitForMyVar(e:Event):void {
            trace(my_var);
            removeEventListener(Event.ENTER_FRAME, waitForMyVar);
        }
    }
    

    В качестве примечания, он появляется my_varне присваивается значение, пока пользователь не щелкнул этап. В функции можно выполнить корректировку, waitForMyVarчтобы дождаться my_varзначения, отличного от null.

    Образец:

    if(my_var != null) {
        trace(my_var);
        removeEventListener(Event.ENTER_FRAME, waitForMyVar);
    }
    

    Надеюсь, это поможет!