我在加载的swf文件之间共享/使用/访问变量/函数时遇到了一些问题。 我的prj包含main.swf文件和2个swf,我在main.swf的第一个init上加载。 我的问题是: 1.如何在2.swf中使用1.swf中的变量(函数在2.swf中运行) 2.如何在1.swf
中调用2.swf中的函数这是我用来加载swf的代码:
var playerMc:MovieClip = new MovieClip();
var dbMc:MovieClip = new MovieClip();
var m2Loader:Loader = new Loader();
var mLoader:Loader = new Loader();
startLoad();
function startLoad()
{
//var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("./_player/player.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadMc);
mLoader.load(mRequest);
addChild(mLoader);
//var m2Loader:Loader = new Loader();
var m2Request = new URLRequest("./_db/db.swf");
m2Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadMc2);
m2Loader.load(m2Request);
addChild(m2Loader);
}
function loadMc(event:Event):void
{
if (! event.target)
{
return;
}
playerMc = event.target.content as MovieClip;
mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadMc);
}
function loadMc2(event:Event):void
{
if (! event.target)
{
return;
}
dbMc = event.target.content as MovieClip;
dbMc.x = -400;
m2Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadMc2);
}
答案 0 :(得分:0)
您必须坚持使用应用程序域。
在大多数情况下,您应该在另一个应用程序域中加载另一个swf,但它与您的问题并不真正相关。
从loader
开始,您必须访问applicationDomain
,然后getDefinition
。从那里,您可以获得课程并在主SWF中使用它们。是的,您可以阅读静态属性。
如果您需要实例,则应访问loader#contents。它指向加载的SWF的根。加载的根是SWF - 是加载的swf的主类的实例。
答案 1 :(得分:-1)
创建一个没有定义的变量,例如
public var MyClass;
你可以看到我没有添加
public var MyClass:Class;
然后在另一个函数中写
this.MyClass = this.mLoader.contentLoaderInfo.applicationDomain.getDefinition(“NameOfClass”)作为Class;
我自己也不太了解这个...我有问题弄清楚你是否只能访问公共静态变量,或者它是否可以访问普通的公共变量和可能的私有变量,因为它创建了同一个类的新实例或者但你想说出来吗??
在您编写上述代码之后...当您想要更改变量时,这通常对我有用
this.MyClass.RandomVariableName = this.MyClass.RandomVariableName + 1;
类似的东西..