希望这不会被视为两次提出同样的问题......
所以我正在开发一个Flash网站(在AS2中),它有一个外部索引swf,它使用loadMovie("subfoo1.swf", placeToShowSwf)
加载子swf文件。这些反过来加载一个xml文件,告诉它要加载什么内容。一切都工作得很好,但我们想在索引swf中添加一个按钮,打开一个子swf文件,其中包含一个或两个不同的变量值。
不幸的是,只需添加一个说
的按钮loadMovie("foo1.swf", placeToShowSwf);
placeToShowSwf.openProject(x);
不起作用,我假设因为在未完全加载的文件上调用了openProject(x)
。我知道代码没有问题,因为我在其他地方创建了一个只调用placeToShowSwf.openProject(x)
的按钮,并且没有任何问题。
我看到两种解决方案,我不确定该怎么做。
loadMovie(new foo1.swf(x), placeToShowSwf)
或等同的东西真是太好了。placeToShowSwf.openProject(x)
。 任何人对这些解决方案中的任何一种都有任何指导,或者可能是我的豌豆般大脑无法理解的其他方式?
答案 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)
onLoadComplete被触发 当所有字节完成下载和类时,onLoadInit被触发 在加载的swf中初始化(这样你就可以访问加载的swf了 方法和属性)
查看MovieClipLoader中的代码示例> as2.0文档中的onLoadInit
http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=Part4_ASLR2.html
祝你好运答案 3 :(得分:0)
你做的方法是正确的,除了你需要等待 onLoadInit 回调才能尝试访问你的子MovieClip。