我有一个 Wrapper SWF,可以加载一系列 AS2 电影。每个 AS2 影片都会加载一系列 .png 文件。
AS3_wrapper.swf
|-> AS2_1.swf
|-> image_1.png
|-> image_2.png
|-> AS2_2.swf
|-> image_1.png
|-> image_2.png
在 AS2 内部,我使用以下命令监听 png 的负载onLoadInit
并更新我的用户界面。
这对于第一个 AS2 swf 来说效果很好。但是当我加载第二个 AS2 swf 时onLoadInit
不会为 png 触发。我的猜测是图像位于缓存或类似的东西中。我在请求末尾放置了一个随机字符串,以尝试避免缓存,但这似乎不起作用。
as2中的代码大致如下:
var flagLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadInit = Delegate.create(this, handleImageLoad);
flagLoader.addListener(listener);
var row:MovieClip = frame1["row" + (numLoaded + 1)];
flagLoader.loadClip(predictionData[numLoaded].flag + "?r="+Math.random(), row.flag);
我确保一次只加载一张图像(我读过一些轶事证据,一次加载多个图像可能会混淆MovieClipLoader
)。对于第一个 as2 文件,一切都很好。当我加载第二个 as2 文件时handleImageLoad
永远不会被叫到。
Update:更令人困惑的是,如果我重新加载第一个 AS2 影片(在第二个 AS2 影片无法加载图像之后),第一个 AS2 影片会再次正常加载图像。
更新2:在尝试从使用 MovieClipLoader 更改为轮询(正如有用的建议)之后,我发现了更多相关的证据。
当我加载第一个 AS2 文件并从顶层剪辑进行跟踪时,它会打印出来_root
。加载时第二个 AS2 文件跟踪相同的内容_root
。这让我检查他们的名字是否冲突,事实确实如此。两人都有一个孩子,名叫frame
。第一个,当我追踪它时,结果是_root.frame
正如预期的那样。第二个 AS2 文件跟踪_level0.instance3.instance118.instance111.frame
。我猜这与问题有关。
Flash 保持两个文件的 _root 相同,但更改其子文件的位置(对于随后加载的具有相同名称的子文件的文件)。因此,要么 onLoad 转到错误的剪辑,要么有关其加载的事件发生。