将外部png加载到AS2 swf中,该swf加载到AS3 swf包装器中

时间:2010-05-20 15:03:17

标签: flash actionscript-3 actionscript actionscript-2

我有一个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内部,我使用onLoadInit监听png的加载并更新我的UI。

这适用于第一个AS2 swf。但是当我加载第二个AS2 swf时,没有为png触发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是错误的剪辑还是有关它的事件都是。

3 个答案:

答案 0 :(得分:1)

每隔3 - 4年我会遇到一个问题,我认为最终会让我感到困扰......

我试图弄清楚为什么即使我成功地将AVM1电影加载到AVM2电影文件中,但是AVM1文件没有按预期运行,我发现了这篇文章。

解决了AS2-AS3文件之间无法通信的最初巨大问题,当AVM1电影在开始播放后不久似乎总是暂停时,我无法相信。

对我来说,MovieClipLoader loadClip()方法没有触发任何进度或已完成的事件,这导致我的文件完全停止播放,正如你们所建议的那样。

你建议在loadClip调用之后运行一个间隔来比较加载到字节总数的字节总数对我来说。

谢谢谢谢谢谢谢谢谢谢谢谢! :d

答案 1 :(得分:0)

詹姆斯

你是对的,我也注意到_root vs _level0.instance3.instance118在你描述的跟踪堆栈中读出,它必须与AVM1内容以及AVM2电影如何处理它有关。

轮询不会始终工作,但您可以使用它来查看触发 loadClip()方法后发生的情况。您是否将 bytesLoaded 视为 undefined ?或者可能是swf已加载但您无法访问它的属性,例如在swf的主时间轴上声明的变量。我已经深入研究了这个问题,发现基本上你有两到三种解决这些问题的方法。轮询AS2容器是查看失败的第一步....

你可以使用 loadMovie 代替 MovieClipLoader 来加载你的.png吗?

您是否尝试在FP10.1下运行示例?奇怪的是,很多这些问题都消失了!

根据AS2应用程序的复杂程度,这可能是一个难以解决的问题。

你检查了这个: http://fladdict.net/blog-en/2007/06/avm2loader-class.html

感谢, 杰夫

答案 2 :(得分:0)

在AS3下运行AS2似乎会引入一些延迟问题....您需要在识别加载的swf之前轮询已加载的swf几次。

我处于类似情况...... AS3 Shell加载了一个庞大而复杂的AS2应用程序,其中包含许多外部swf,依赖关系等。我必须做的是在loadClip调用后运行一个间隔来比较加载的字节到字节总数...然后当它们彼此相等(但超过4)时,我可以安全地触发onLoadInit函数,否则它将永远不会触发。

因此,您丢失了MovieClipLoader在AS2中为您提供的所有init,进度和错误事件。您将回到FP5和FP6天,但它确实可以正常工作。很想知道其他人的经历,以及是否有更好的解决方法。