如何在.Fla文件中访问.as文件变量?

时间:2011-11-09 12:25:34

标签: flash actionscript-3

我在a.as File.i中有一个函数(初始化)想从aaa.fla文件中访问该变量吗?。如何访问变量?我的主类是a.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 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,我不会进入所有这些方法。

但最简单的方法可能是将加载的SWF转换为Object(这是一个动态类,因此它将接受未知的成员名称)并在那里添加属性,就像这样(我假设您使用Loader加载它,因为你还没有发布实际的加载代码):

Object(loader.content).sourceId = sourceId;

或者您也可以使用括号语法:

loader.content["sourceId"] = sourceId;

加载的SWF然后不需要知道关于外部类的任何内容并且可以使用它自己的变量。您唯一需要注意的是:a)SWFs基类是动态类,如MovieClip,或b)如果您有非动态基类,请确保它具有公共变量或setter方法叫sourceId

如果您需要更多的编译时间类型检查,您还可以让您的SWF实现一个接口并转换为该接口而不是Object。

答案 1 :(得分:1)

你的问题的措辞方式,很难确定你真正要问的是什么,但在我看来,你正在寻找一种方法将sourceId变量放入加载的swf中。

首先我应该解释一下,尝试从swf中读取它是不好的做法 - 子对象不应该知道父对象。所以我不会按要求回答这个问题。

您可能不知道的一件事是DisplayObject可以访问自己的loaderInfo属性,因此您可能不需要在此特定实例中从外部获取此值。

作为一般情况,您可以在swf中使用的文档类上公开公共属性,然后可以将loaderInfo.content转换为该类,然后将该属性设置为父级中的函数的sourceId

答案 2 :(得分:1)

--------------------------开始编辑------------------- ----------------

.fla文件是Flash IDE文档!

您的sourceId变量来自哪里?

在您的示例中,它似乎来自flashvars,这意味着您将从SWF嵌入代码中获取值。

如果是这种情况,这与您的.fla文件无关,因为您不会使用HTML嵌入代码加载外部swf。

让我们暂时忘记flashvars ...你在使用.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
{
     //....
}