我在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)
答案 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
{
//....
}