【发布时间】:2010-05-20 15:03:16
【问题描述】:
我有一个加载一系列 AS2 电影的 Wrapper SWF。每个 AS2 电影都会加载一系列 .png 文件。
AS3_wrapper.swf
|-> AS2_1.swf
|-> image_1.png
|-> image_2.png
|-> AS2_2.swf
|-> image_1.png
|-> image_2.png
在 AS2 内部,我使用 onLoadInit 监听 png 的负载并更新我的 UI。
这适用于第一个 AS2 swf。但是当我加载第二个 AS2 swf 时,不会为 pngs 触发 onLoadInit。我的猜测是图像在缓存或类似的东西中。我在请求的末尾放了一个随机字符串以尝试避免缓存,但这似乎不起作用。
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 永远不会被调用。
更新:更令人困惑的是,如果我重新加载第一个 AS2 电影(在第二个 AS2 电影无法加载图像之后),第一个 AS2 电影又可以正常加载图像。
更新 2:在尝试从使用 MovieClipLoader 更改为轮询(如有用的建议)后,我发现了更多相关的证据。
当我加载第一个 AS2 文件并从顶层剪辑跟踪时,它会打印出 _root。加载时的第二个 AS2 文件跟踪相同的 _root。这导致我检查他们是否在名称上发生冲突,并且确实如此。两人都有一个孩子叫frame。第一个,当我跟踪它时,它按预期显示为_root.frame。第二个 AS2 文件跟踪 _level0.instance3.instance118.instance111.frame。我猜这与问题有关。
Flash 保持两个文件的 _root 相同,但更改了其子文件的位置(对于随后加载的具有相同名称子文件的文件)。所以要么 onLoad 是去错误的剪辑,要么是关于它加载的事件。
【问题讨论】:
标签: flash actionscript-3 actionscript actionscript-2