Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 将外部PNG加载到AS2 swf中并加载到AS3 swf包装中_Flash_Actionscript 3_Actionscript_Actionscript 2 - Fatal编程技术网

Flash 将外部PNG加载到AS2 swf中并加载到AS3 swf包装中

Flash 将外部PNG加载到AS2 swf中并加载到AS3 swf包装中,flash,actionscript-3,actionscript,actionscript-2,Flash,Actionscript 3,Actionscript,Actionscript 2,我有一个包装器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。

我有一个包装器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文件和跟踪时,它会打印出
\u root
。加载时的第二个AS2文件跟踪相同的
\u root
。这让我检查他们是否在名字上有冲突,而且他们是。两者都有一个名为
frame
的子项。第一个,当我跟踪它时,它显示为
\u root.frame
,正如预期的那样。第二个AS2文件跟踪
\u level0.instance3.instance118.instance111.frame
。我猜这与问题有关


Flash保持两个文件的_根相同,但更改其子文件的位置(对于随后加载的具有同名子文件的文件)。因此,要么onLoad指向错误的剪辑,要么它加载的事件是错误的。

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

我也有类似的情况。。。AS3外壳加载一个大型而复杂的AS2应用程序,该应用程序具有许多外部SWF、依赖项等。我必须做的是在loadClip调用后运行一个间隔,以比较加载的字节数与总字节数。。。然后,当它们彼此相等(但超过4)时,我可以安全地启动onLoadInit函数,否则永远不会启动

因此,您将丢失MovieClipLoader在AS2中提供给您的所有初始化、进度和错误事件。。您将返回FP5和FP6天,但它似乎工作可靠。我很想听听其他人的经历,如果有更好的办法的话。

詹姆斯

你说得对,我还注意到,在你描述的跟踪堆栈中读取的_rootvs _level0.instance3.instance118,它必须与AVM1内容以及AVM2电影如何处理有关

轮询并不总是有效的,但是您可以使用它来查看在启动loadClip()方法后发生了什么。您是否认为您的字节加载为未定义?或者可能swf已加载,但无法访问其属性,例如swf主时间线上声明的变量。我深入研究了这个问题,发现基本上你有两到三种方法来解决这些问题。轮询AS2容器是查看失败原因的第一步

你能用loadMovie而不是MovieClipLoader来加载你的.png吗

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

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

您签出了以下内容:

谢谢,
杰夫

每隔3-4年我会遇到一个问题,我认为这个问题最终会让我崩溃

当我试图弄明白为什么即使我成功地将我的AVM1电影加载到AVM2电影文件中,AVM1文件也没有按预期运行时,我遇到了这篇文章

在解决了无法在AS2-AS3文件之间进行通信这一最初的重大问题之后,我简直不敢相信AVM1电影在开始播放后似乎总是很快停止播放

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

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


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

我会尝试一下,如果它有效,我会在这里报告。如果这是真的,那真的很糟糕,但我很感激有一个可能的解决办法。我担心你的解决方案对我不起作用。但它确实帮助我找到了更多的信息。也许你可以再看看我的描述,提供更多的信息。谢谢杰夫的评论。我尝试了loadMovie而不是MovieClipLoader,结果是一样的。如果我轮询bytesLoaded属性,它将返回4或一些奇怪的结果。我一直在使用最新的10.1播放器。我在网上找到了关于这个问题的其他报告(一两篇),但没有人有一个解决方法可以为我工作(大多数涉及以某种方式修改as2 swf,这对我来说是不可能的)。