Как получить доступ к переменной .as file в файле .Fla? - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть функция (инициализация) внутри a.as File.i я хочу получить доступ к этой переменной из файла aaa.fla? Как я могу получить доступ к переменной? Мой основной класс - файл .as внутри a.как файл я загружаю файл aaa.swf AnyBody Помогите мне заранее Заранее спасибо!

public function initialize(parameters:Object, stage:Stage, 
     loaderInfo:LoaderInfo, pluginHostWhitelist:Array):void
    {
        sourceId=loaderInfo.parameters.src;
        addText();//Inside this function i load the aaa.swf file,
        //here i want to access the variable "sourceId"
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

 addText(){
_loader.load(new URLRequest("aaa.swf"));//while running this a.as i want to get the Sourceid Value
 mainContainer.addChild(_loader);   
    }

Мой aaa.fla Его в другом месте

import fl.motion.ColorMatrix;
import flash.filters.ColorMatrixFilter;
var sourceId:String// here i want to access the "sourceid" variable from a.as file
trace(sourceId)

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

Если ваш вопрос сформулирован, трудно быть уверенным в том, что вы действительно спрашиваете, но мне кажется, что вы ищете способ получить переменную sourceId в загруженный SWF.

Сначала я должен объяснить, что пытаться читать его из SWF - плохая практика - дочерние объекты не должны знать о родительских объектах.Поэтому я не собираюсь отвечать на вопрос в том виде, в котором он был задан.

Одна вещь, о которой вы можете не знать, это то, что DisplayObject имеет доступ к своему собственному свойству loaderInfo, поэтому вам, вероятно, не нужно получать это значение изснаружи в этом конкретном экземпляре.

В более общем плане вы можете предоставить открытое свойство для класса документа, который вы используете в swf, а затем вы можете привести loaderInfo.content к этому классу, а затем установитьэто свойство для sourceId из функции в родительском.

1 голос
/ 09 ноября 2011

-------------------------- начать редактирование ------------------- ----------------

Файл .fla является документом Flash IDE!

Откуда берется ваша переменная sourceId?

В вашем примере это, кажется, происходит от flashvars, что означает, что вы получите значение из вашего кода встраивания SWF.

Если это так, это не относится к вашему файлу .fla, потому что вы не загрузите внешний SWF-файл, используя встроенный HTML-код.

Давайте на время забудем о flashvars ... Используете ли вы Document Class с вашим файлом .fla? Если нет, то я бы посоветовал вам сделать это намного проще. Если да, то я полагаю, что вы загрузите внешний SWF там.

Во внешнем SWF-файле вы можете использовать событие для отправки пользовательских событий ...

    //in your external SWF
    private function onAddedToStage( event:Event ):void
    {
        //you could use a Custom Event
        //do some research on AS3 custom events... 
        var idEvent:YourEvent = new YourEvent();
        idEvent.sourceId = sourceID;

        this.dispatchEvent( idEvent );
    }


     //then in your .fla's Document Class
     private var sourceId:Object;

     private function addExternalSwf( event:Event ):void
     {
          var external:MovieClip = event.currentTarget.content as MovieClip;
          external.addEventListener( YourEvent.SOURCE_ID , idEventListener );
          addChild( external );

          //remove addExternalSwf listener here...
     }

     private function idEventListener( event:YourEvent ):void
     {
          sourceId = event.sourceId;
          //remove idEventListener listener here...
     }

---------------------- конец редактирования ----------------------- ------

Ваш вопрос действительно неясен ... Я могу пойти только по примеру кода, который вы даете

public function initialize(parameters:Object, stage:Stage, 
           loaderInfo:LoaderInfo, pluginHostWhitelist:Array):void
{
    //here you're retrieving the sourceID variable
    //from the loaded SWF
    sourceId=loaderInfo.parameters.src;

    //Inside this function i load the a.swf file, 
    //here i want to access the variable "sourceId"...???

    if( sourceId != null )
         addText( sourceId );
    else
         trace('sourceID has a null value!!!!');

    //why do you remove the event listener here
    //and not within the onAddedToStage method???
    removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}

private function addText(sourceId:Object):void
{
     //....
}
1 голос
/ 09 ноября 2011

Есть много способов сделать это, и я не буду вдаваться во все из них.

Но самый простой способ - это, вероятно, привести ваш загруженный SWF к объекту (который является динамическим классом, поэтомупримет неизвестные имена членов) и добавит туда свойство, например, так (я полагаю, вы используете Loader для его загрузки, так как вы не опубликовали фактический код загрузки):

Object(loader.content).sourceId = sourceId;

или вы также можетеиспользуйте синтаксис скобок:

loader.content["sourceId"] = sourceId;

Загруженный SWF-файл не должен ничего знать о внешних классах и может использовать свою собственную переменную.Единственное, о чем вам нужно позаботиться, это то, что либо a) базовый класс SWFs является динамическим классом, таким как MovieClip, либо b) если у вас есть нединамический базовый класс, убедитесь, что у него есть открытая переменная или метод установкипо имени sourceId.

Если вам нужна дополнительная проверка типов времени компиляции, вы также можете сделать так, чтобы ваш SWF реализовывал интерфейс и приводил к этому интерфейсу вместо Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...