Actionscript 3 从另一个/根 SWF 调用函数

Posted

技术标签:

【中文标题】Actionscript 3 从另一个/根 SWF 调用函数【英文标题】:Actionscript 3 call function from another/root SWF 【发布时间】:2015-08-21 03:42:12 【问题描述】:

所以我有 'home.swf' 和 'play.swf' 当我运行应用程序时,我首先打开 home.swf。

home.swf 上有按钮可以播放..

//home.swf
btnPlay.addEventListener(MouseEvent.CLICK, pickPlay);
function pickPlay(event:MouseEvent):void

    var loader:Loader = new Loader();
    var SWFRequest:URLRequest = new URLRequest("play.swf");
    loader.load(SWFRequest);
    addChild(loader);

在 play.swf 上有一个返回主页的按钮

//play.swf
btnHome.addEventListener(MouseEvent.CLICK, clickHome);
function clickHome(event:MouseEvent):void

    var loader:Loader = new Loader();
    var SWFRequest:URLRequest = new URLRequest("home.swf");
    loader.load(SWFRequest);
    addChild(loader);

问题是..当我运行了这么多次..就像玩然后回到家,然后再玩.. 应用程序会滞后。因为这就像我只是加载回家并一遍又一遍地播放但不卸载它......

现在我需要卸载它,但有人告诉我让 main.swf 加载和卸载.. 所以当第一次运行 main.swf 时首先调用 home.swf ...... 当我们点击 play.. main.swf 将卸载 home.swf 并加载 play.swf

有什么解决办法吗? 我希望你能明白我的意思:)

【问题讨论】:

我已经编辑了我的问题,希望你能理解@HITMAN 如果您打算“回家”,为什么 play.swf 会自行加载? @null 那我该怎么办? @GandhyOnly 你能先解释一下你这样做的意图吗?我完全不明白。如果你想回家,如果你加载home.swf我会理解,但为什么要play.swf?这怎么能让你回家? @null 我的问题有问题..我已经编辑了它..play.swf 用于玩游戏...并且有一个返回主页的按钮..并且可以选择另一个游戏...我的意图是在加载新的 SWF 之前卸载 swf.. 上面的故事只是一个在加载新的 SWF 之前卸载的示例 【参考方案1】:

你的加载器被函数中的一个局部变量引用。这使得以后很难引用它。

把你的代码改成这样:

btnPlay.addEventListener(MouseEvent.CLICK, pickPlay);
var loader:Loader = new Loader();
addChild(loader);

function pickPlay(event:MouseEvent):void

    var SWFRequest:URLRequest = new URLRequest("play.swf");
    loader.load(SWFRequest);

最简单的方法是将“返回主页”按钮放在主页上。如果从视觉上可以做到这一点,请考虑将按钮放入 play.swf

如果您确实想将按钮放入 play.swf,最好的选择是在按下按钮时在 play.swf 中调度一个事件。您在 home.swf 中监听事件,如果发生则卸载文件。

无论你怎么触发,加载器都提供了两种方法来卸载内容:unload()unloadAndStop() 您想调用其中任何一个来删除加载的文件。

【讨论】:

你有调度加载和卸载事件的例子吗?

以上是关于Actionscript 3 从另一个/根 SWF 调用函数的主要内容,如果未能解决你的问题,请参考以下文章

将 ActionScript 2 SWF 转换为 ActionScript 3 SWF 文件(可以剥离代码)

Actionscript 3 - 在我的 swf 中加载另一个 swf 时出现列表错误

将 SWF 加载到 ActionScript 3 项目中 (Flex Builder)

ActionScript 3 创建一个对象,您可以为addChild加载SWF的Into

ActionScript 3 从外部swf调用函数

ActionScript 3 Flash调整Swf的大小