as3来自子swf的文档类中的调用函数

时间:2017-07-23 06:15:08

标签: actionscript-3 flash

我有一个加载器swf作为主swf,负责加载和渲染外部swf。

在加载器swf的文档类中,我有一个名为test的函数。

public function test() {
    ExternalInterface.call("console.log", "Test");
}

我想从使用称为StateManager的外部类加载的子swf中调用此函数。正在加载器swf的文档类中创建一个新的StateManager类实例,如下所示。

import com.xxxx.state.StateManager;

public class Loader extends MovieClip {

    private static var _instance:Loader;
    public static function get instance() { return _instance; }

    public var stateManager = new StateManager();

    // Other code has been ommited obviously.

}

然后在StateManager中调用一个函数,该函数呈现新的swf。

public function setActiveState(url) {
    var request = new URLRequest(url); 
    var loader = new Loader(); 
    loader.load(request);
    addChild(loader);
}

在子swf的文档类中,我试图使用许多不同的方法调用加载器swf的测试函数,所有这些都没有发生任何事情并且没有产生错误(我已经确认子swf正在渲染) 。我尝试使用以下代码。

public class ChildSWF extends MovieClip {

    public function ChildSWF() {
        MovieClip(parent.parent).Loader.instance.test();
    }

}

以及

public class ChildSWF extends MovieClip {

    public function ChildSWF() {
        MovieClip(parent.parent.parent).Loader.instance.test();
    }

}

以及我在研究这个问题时看到的许多其他代码。如果有人可以提供帮助,那将非常感激。

1 个答案:

答案 0 :(得分:0)

首先。从来没有,绝对从不将您的课程命名为已有的课程。你喜欢用巨大的霓虹灯WELCOME显示器来欢迎未来的麻烦,偶尔会有烟花爆炸。

然后。您的类 Loader 不是任何显示对象的成员(也不是变量),并且无法以您尝试的方式进行访问。类不是这样的。它们是 ApplicationDomain 的定义。您可能想要查找并阅读它:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ApplicationDomain.html#getDefinition()

其余的很简单。

public var callBack:Function;

public function setActiveState(url, handler)
{
    callBack = handler;

    var request = new URLRequest(url); 
    var loader = new Loader; 
    loader.load(request);
    addChild(loader);
}

然后在加载的内容中:

public class ChildSWF extends MovieClip
{
    public function ChildSWF()
    {
        (parent.parent as Object).callBack();
    }
}

加载的内容将调用 callBack 变量中的任何方法引用;