as3加载swf访问变量

时间:2013-10-18 08:01:42

标签: actionscript-3 variables flash external

我在加载的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);
}

2 个答案:

答案 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;

类似的东西..