在Flash / AS3中使用Loader.load()函数时是挂起还是滞后?

时间:2011-08-10 23:16:08

标签: flash flex actionscript-3 avm2

我创建了一个简单的图像列表,每60秒重新加载一次。但是,我注意到当重新加载过程开始时,Flash似乎挂起或者至少不接受/记住任何鼠标输入。

具体来说,虽然它应该被冻结,但我尝试点击一个按钮来执行它的常用功能,此时此功能只是显示鼠标按下状态,但它不会记录点击,直到所谓的冻结结束。这导致我不得不再次点击。

我真的需要知道,如果我正在加载说5个小png图像(在循环中调用load() 5次)会导致Flash挂起并忽略任何鼠标输入或我在说疯了,应该在别处寻找问题。

我理解Flash不是多线程的,但肯定调用load()并不会导致整个应用程序只关闭100-200毫秒?

非常感谢任何输入,谢谢。

3 个答案:

答案 0 :(得分:2)

回应你的评论:

除了说Loader对象实际上加载swf或某种类型的显示对象然后flash内部修改二进制数据,然后在内部解析SWF或位图类型并将其呈现给.content在Loader对象中显示对象。在所有这些之前,无需调度获取二进制数据的URL请求。在loader对象的背景中有很多事情发生。如果你想要修改二进制数据的证据只需加载一个图像,那么将这些字节从加载器中复制出来并保存在某个地方。然后与原始数据进行比较。你会看到那里的修改,事实上,如果你将输出字节保存回图像并尝试用图像查看器打开它,它将无法工作,这也是修改的证明。除此之外,您可以发布一个指向SWF的链接,并让其他人在这里测试它以确认它们发生了同样的事情,我相信它会。由于任何与Loader或显示对象相关的代码都是封闭源代码而不包含在Tamarin项目(Flash VM的开源部分)中,因此这将是您获得的最多证据。

答案 1 :(得分:1)

关于冻结 - 阅读有关LoaderContext#imageDecodingPolicy的信息,请参阅此处http://www.bytearray.org/?p=2931

答案 2 :(得分:0)

要回答我自己的问题,不要没有滞后或挂起。 Flash设法很好地处理所有事情,结果发现在使用MouseEvent.CLICK时应该注意,因为如果在完成mousedown但是在鼠标启动之前重新加载期间交换图像对象,则flash不会发送点击事件,因为您没有在同一个对象上导致mousedown和mouseup。这显然让我觉得有一个滞后,因为它似乎没有注册我的鼠标点击。

感谢所有试图解决问题的人。