繁体   English   中英

将外部PNG加载到AS2 SWF包装器中的AS2 SWF中

[英]Loading external pngs into an AS2 swf that is loaded into an AS3 swf 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-4年一次,我遇到一个问题,我认为它将最终使我失望...

当我试图弄清楚为什么即使我成功地将AVM1电影加载到AVM2电影文件中时,我也遇到了这篇文章。

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

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

您的建议是在loadClip调用之后运行一个间隔,以将加载的字节与字节总数进行比较,这对我来说很有效。

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

在AS3下运行AS2似乎会引入一些延迟问题。...您需要先轮询已加载的swf几次,然后它才能识别已加载。

我处在类似的情况下……一个AS3 Shell加载具有许多外部swfs,依赖项等的大型且复杂的AS2应用程序。我要做的是在loadClip调用之后运行一个间隔,以比较加载的字节与总的字节数...然后当它们彼此相等(但超过4)时,我可以安全地触发onLoadInit函数,否则该函数将永远不会触发。

因此,您会丢失MovieClipLoader在AS2中给您的所有初始化,进度和错误事件。.您要回到FP5和FP6的日子,但它确实可以可靠地工作。 很想听听其他人的经历,以及是否有更好的解决办法。

詹姆士,

没错,我还注意到您描述的跟踪堆栈中的_root vs _level0.instance3.instance118读数,它必须与AVM1内容以及AVM2电影如何处理它有关。

轮询并非总能正常工作,但是您可以在启动loadClip()方法后使用它来查看正在发生的情况。 您是否看到bytesLoaded未定义 也许已加载了swf,但是您无法访问其属性,例如在swf主时间轴上声明的变量。 我已经对这个问题进行了深入研究,发现实际上您有两种或三种方法来解决这些问题。 轮询AS2容器是了解失败原因的第一步。

您可以使用loadMovie而不是MovieClipLoader来加载.png文件吗?

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

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

您已检查了此内容: http : //fladdict.net/blog-zh/2007/06/avm2loader-class.html

谢谢,杰夫

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM