从另一个swf中打开一个swf文件,其默认值不同于默认值

时间:2008-11-06 19:11:35

标签: flash actionscript-2

希望这不会被视为两次提出同样的问题......

所以我正在开发一个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)
  3. 任何人对这些解决方案中的任何一种都有任何指导,或者可能是我的豌豆般大脑无法理解的其他方式?

4 个答案:

答案 0 :(得分:0)

第2号是你应该做的。不幸的是,你仍然陷入了ActionScript 1的境地,而ActionScript 3已经出现了几年。所以我不知道确切的语法(我自己开始使用ActionScript 2上的flash),但是#2(等待SWF完成加载,然后告诉它做什么)就是我要做的。

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

答案 1 :(得分: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的组件进行加载 - 只需按照the docs进行操作即可。在表面下,这类似于(2),但细节隐藏在MovieClipLoader类中。

答案 2 :(得分:0)

<}> fenomas答案相当不错,但也有一点“hacky” 如果你使用AS2加载你的swfs使用MovieClipLoader类。 它有你可以听的事件,你会对onLoadInit感兴趣 事件。虽然人们可能会直觉说它在加载过程中被触发了 已初始化,onLoadComplete应该是使用的东西,情况并非如此。

当所有字节完成下载时,

onLoadComplete被触发 当所有字节完成下载和类时,onLoadInit被触发                在加载的swf中初始化(这样你就可以访问加载的swf了                方法和属性)

查看MovieClipLoader中的代码示例&gt; as2.0文档中的onLoadInit

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

祝你好运

答案 3 :(得分:0)

你做的方法是正确的,除了你需要等待 onLoadInit 回调才能尝试访问你的子MovieClip。