2010-05-20 99 views
2

我有一个加载一系列AS2电影的包装SWF。每个AS2电影都会加载一系列.png文件。将外部PNG加载到加载到AS3 swf包装中的AS2 swf中

AS3_wrapper.swf 
|-> AS2_1.swf 
     |-> image_1.png 
     |-> image_2.png 
|-> AS2_2.swf 
     |-> image_1.png 
     |-> image_2.png 

里面我听使用onLoadInit的png格式的加载和更新我的UI的AS2的。

这适用于第一个AS2 SWF。但是当我加载第二个AS2 swf时,onLoadInit没有为pngs触发。我的猜测是,图像在缓存或类似的东西。我在请求的末尾放置了一个随机字符串,以避免缓存,但似乎不起作用。

在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会出现错误的剪辑或关于它加载的事件。

回答

0

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

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

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

+0

我会试一试,如果有效,请回到这里。这真的很糟糕,如果这是真的,但我感谢有一个可能的解决方法。 – 2010-05-26 18:50:54

+0

恐怕你的解决方案不适合我。但它确实帮助我追踪了更多信息。也许你可以再看看我的描述并提供更多信息。 – 2010-05-26 19:24:04

0

詹姆斯,

你说得对,我也注意到,_root VS _level0.instance3.instance118读出你,你所描述的跟踪堆栈,就必须进行相关的AVM1内容以及如何AVM2电影处理它。

轮询不会总是的工作,但你可以用它来看看发生了什么,你火loadClip()方法后。你看到你的bytesLoaded as undefined?或者,也许swf已加载,但无法访问它的属性,例如在swf的主时间轴上声明的变量。我已经深入了解这个问题,发现基本上你有两种或三种解决这些问题的方法。轮询AS2容器是第一步,看看有什么失败....

你可以得到你.pngs在使用的loadMovie而不是的MovieClipLoader加载?

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

根据AS2应用程序的复杂性,这可能是一个棘手的问题。

您签了这一点: http://fladdict.net/blog-en/2007/06/avm2loader-class.html

感谢, 杰夫

+0

感谢您对Geoff的评论。我试过loadMovie而不是MovieClipLoader,结果是一样的。如果我轮询bytesLoaded属性,它返回4或奇怪的东西。我一直在使用最新的10.1播放器。 我在网上发现了这个问题的其他报告(一两个),但没有人可以为我工作的解决方法(大多数涉及以某种方式改变as2 swf,这对我来说是不可能的)。 – 2010-06-14 22:26:35

1

每隔3 - 4年我遇到,我认为将最终打破了我一个问题...

我来了在试图弄清楚为什么即使我成功将我的AVM1电影加载到AVM2电影文件中时,AVM1文件未按预期运行。

解决了无法在AS2-AS3文件之间进行通信的最初大问题,我无法相信AVM1电影在开始播放后不久就会停止播放。

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

您的建议是在loadClip调用之后运行一个时间间隔,以比较加载到字节总数的字节总计适用于我。

谢谢谢谢谢谢谢谢谢谢谢谢! :D