在另一个具有不同于默认值的swf文件中打开一个swf文件

5
希望这不被视为重复提问...
我正在制作一个Flash网站(AS2),它有一个外部索引swf文件,使用loadMovie(“subfoo1.swf”,placeToShowSwf)加载子swf文件。这些文件会加载一个XML文件,告诉它要加载什么内容。一切都很顺利,但我们想在索引swf中添加一个按钮,以打开一个带有一个或两个不同值的变量的子swf文件。
不幸的是,只是添加一个按钮说
loadMovie("foo1.swf", placeToShowSwf);
placeToShowSwf.openProject(x);

不起作用,我认为是因为在未完全加载文件的情况下调用了openProject(x)。我知道代码没有问题,因为我在其他地方制作了一个按钮,只调用placeToShowSwf.openProject(x),没有任何问题。
我看到两个解决方案,但我都不确定如何做。
  1. 在创建swf文件时更改所需值,就像类的构造函数一样。但是是否有某种用于swf文件的构造函数?只需要说loadMovie(new foo1.swf(x), placeToShowSwf)或等效的东西就非常好。
  2. 等到swf(可能还有xml)加载完成后,再调用placeToShowSwf.openProject(x)
有人对这些解决方案有什么指导意见,或者也许有我无法理解的其他方法吗?
4个回答

0

你应该做的是第二件事。不幸的是,你仍然停留在ActionScript 1领域,而ActionScript 3已经发布了几年了。所以我不知道确切的语法(因为我自己是从ActionScript 2开始学习Flash),但是#2(等待SWF完成加载,然后告诉它要做什么)是我会做的。

如果你不介意学习一点AS2(通常可以混合使用AS1和AS2而不会有太多问题),那么你应该看看MovieClipLoader。它提供回调来告诉你子SWF何时完成加载。


0
fenomas的回答相当不错,但如果你使用AS2,还有一种不那么“hacky”的方法可以加载你的swf文件,那就是使用MovieClipLoader类。它有一些事件可以监听,你可能对onLoadInit事件感兴趣。虽然人们可能会直觉地认为它在加载过程初始化时被触发,而onLoadComplete应该是要使用的东西,但事实并非如此。
onLoadComplete在所有字节下载完成后被触发 onLoadInit在所有字节下载完成并且加载的swf中的类被初始化时被触发(这样你就可以访问加载的swf的方法和属性)
请查看as2.0文档中MovieClipLoader > onLoadInit的代码示例。

http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=Part4_ASLR2.html

祝你好运


0
你的做法是正确的,只是在尝试访问子MovieClip之前,需要等待onLoadInit回调。

0

有三种简单的方法来处理这个问题:

(1) - 反转命令的方向。也就是说,在父级 SWF 中你需要:

projectType = "x";
loadMovie("foo1.swf", placeToShowSwf);

而子(已加载)SWF 有这个:

openProject( _parent.projectType );

你已经有了想法。如果子SWF从不同的服务器加载,这种方法就行不通了,除非你解决跨域脚本问题。

(2) - 等待MC加载。不幸的是,AS2没有内置的加载事件可以使用,所以常见的方法是使用onEnterFrame,像这样:

someMovieClip.onEnterFrame = function() {
    if ( path_to.placeToShowSwf.openProject ) {
        path_to.placeToShowSwf.openProject(x);
        this.onEnterFrame = null;
    }
}

如果你想在方法可用时立即调用它,那么就可以这样做;如果你想等到子 SWF 完全加载完毕再调用它,那么你需要检查子 SWF 的 getBytesLoaded()getBytesTotal() 方法。

(3) 使用像 MovieClipLoader 这样的组件来进行加载 - 只需按照 文档 中的说明操作。在表面下,这与 (2) 类似,但细节被隐藏在 MovieClipLoader 类中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接