0

我对在加载的 swf 文件之间共享/使用/访问变量/函数有一些疑问。我的 prj 由 main.swf 文件和 2 个我在 main.swf 的第一个初始化时加载的 swf 组成。我的问题是: 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);
}
4

2 回答 2

0

您必须坚持使用应用程序域。在大多数情况下,您应该在另一个应用程序域中加载另一个 swf,但这与您的问题并不真正相关。从loader,你必须访问到applicationDomain然后getDefinition。从那里,您可以获取课程并在您的主 swf 中使用它们。是的,您可以读取静态属性。如果你需要实例,你应该访问 loader#content。它指向加载的 SWF 的根。加载的根是 SWF - 是加载的 swf 的主类的实例。

于 2013-10-18T17:28:37.990 回答
-1

创建一个没有定义的变量,例如

公共变量我的类;

如您所见,我没有添加

公共 var MyClass:Class;

然后在另一个函数中写

this.MyClass = this.mLoader.contentLoaderInfo.applicationDomain.getDefinition("NameOfClass") as Class;

我自己对此不太了解..我无法确定您是否只能访问公共静态变量,或者是否可以访问普通的公共变量和可能的私有变量,因为它正在创建同一类的新实例,或者您想要说它..?

在你写完上面的代码之后..当你想改变一个变量时,这通常对我有用

this.MyClass.RandomVariableName = this.MyClass.RandomVariableName + 1;

类似的东西..

于 2016-09-29T17:59:29.093 回答