5

希望这不会被视为两次问同一个问题......

所以我正在开发一个 Flash 网站(在 AS2 中),它有一个外部索引 swf,它使用loadMovie("subfoo1.swf", placeToShowSwf). 这些依次加载一个 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

4 回答 4

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 完全加载,您需要检查子 SWFgetBytesLoaded()getBytesTotal()方法。

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

于 2008-11-10T09:57:37.130 回答
0

2号是你应该做的。不幸的是,您仍然停留在 ActionScript 1 领域,而 ActionScript 3 已经推出几年了。所以我不知道确切的语法(我自己从 ActionScript 2 上的 flash 开始),但 #2(等待 SWF 完成加载,然后告诉它要做什么)是我会做的。

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

于 2008-11-06T20:58:54.657 回答
0

fenomas 的回答相当不错,但如果您使用 AS2 使用 MovieClipLoader 类加载您的 swf,还有一种不那么“hacky”的方式。它有你可以监听的事件,你会对 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

祝你好运

于 2009-04-11T14:39:03.630 回答
0

您所做的方式是正确的,只是您需要等待onLoadInit回调,然后再尝试访问您的子影片剪辑。

于 2009-04-11T14:45:59.807 回答