Actionscript 3 立即更换swf

Actionscript 3 立即更换swf,actionscript-3,Actionscript 3,只是在寻找一些想法(试图缩短此描述,但没有成功): 我希望能够即时更新swf—我的意思是,在它的整个新版本完全准备好之前不要刷新它,然后立即替换浏览器窗口中的现有内容(与删除现有页面,然后是灰色屏幕,然后是页面的增量重建相反) 实际上,我现在有一个方法来实现这一点:swf上的所有内容都在画布上,所以我在幕后创建一个新画布,用所有新控件重新填充它,然后在一切就绪时,显示这个新画布并销毁旧画布 但奇怪的是,以这种方式构建新页面所需的时间实际上是我将其新版本放在单独的swf中并显示在自己的网页上所需时

只是在寻找一些想法(试图缩短此描述,但没有成功):

我希望能够即时更新swf—我的意思是,在它的整个新版本完全准备好之前不要刷新它,然后立即替换浏览器窗口中的现有内容(与删除现有页面,然后是灰色屏幕,然后是页面的增量重建相反)

实际上,我现在有一个方法来实现这一点:swf上的所有内容都在画布上,所以我在幕后创建一个新画布,用所有新控件重新填充它,然后在一切就绪时,显示这个新画布并销毁旧画布

但奇怪的是,以这种方式构建新页面所需的时间实际上是我将其新版本放在单独的swf中并显示在自己的网页上所需时间的两倍。(因此是2秒对1秒)。但是如果新版本在它自己的网页上,那么现有的页面就会消失,被一个灰色屏幕取代,然后是新页面的增量构建(增量构建只需要一秒钟,但仍然不是我想要的效果)

基本上,我正在寻找的是创建一个包含新版本的新SWFLoader,然后说,“当新SWFLoader中的应用程序发送某个信号时,用这个新SWFLoader的内容替换浏览器窗口中的整个现有swf应用程序。”


或者,如果有一种我目前还不知道的方法可以只用html来完成所有这些(即,只有当新页面完全准备好时,才立即在浏览器窗口中替换整个html页面),那也太好了。

您似乎建议使用shell/预加载程序,例如,最小SWF处理外部SWF的加载/卸载/转换。我想你差不多是自己解释的:)

要记住的事情(从我的头脑中):

  • 在卸载旧SWF之前,请确保完全控制启动/停止进程并释放内存。在这种情况下,一个好的做法是共享一个公共接口,以便shell一致地访问文档类。(例如,启用/禁用/缩放)
  • 使用相同或同名的类时要小心,因为首先加载的类不会被重写
我提出了一个方案,我的应用程序在同一个应用程序中的新SWFLoader中克隆自身。这明显更快(即在新的SWFLoader中重新创建整个重新配置的应用程序,而不是重新配置已加载的应用程序)。这可能与FP优化新应用程序的加载过程有关


基本上,在我的应用程序第一次运行时,它只创建一个子SWFLoader来保存实际的应用程序。然后,如果需要重新配置该应用程序,将创建一个新的子SWFLoader,并将其作为顶层的子SWFLoader添加为“this.addChildAt(0)”。(因此它暂时被旧的SWFLoader遮挡。)当新的SWFLoader完成加载时,它通过调整“this.parent.parent.parent.parent.removeChildAt(1)”来删除以前的SWFLoader。移除旧的SWFLoader会使新的SWFLoader立即可见。我必须将这些父级串在一起,才能从新SWFLoader中运行的实际应用程序访问两个SWFLoader的顶级父级。(SWFLoader中的应用程序是从SWFLoader的父级中删除的四个父级)。我想没人明白我在说什么,但至少我解决了我的问题。

swf是在启动时通过xml文件配置的,这就是我所说的“创建新版本”。正如我所说的,实际上创建一个新版本的swf,并从头开始重新加载它比重新配置现有的swf要快。但是如果我从头开始重新加载它,我还没有找到一种方法来立即用它替换现有的swf(没有灰色屏幕等)。有一件事我从来没有想到,那就是阻止我具体实现我在这里想要的东西:我希望子swf能够在父应用程序中调用公共函数,反之亦然,是否从服务器访问其中一个(即,两个都可以在本地文件系统中)。我从孩子那里尝试类似“this.parent…SystemManager.getDefinitionbyID(“funcX”)(…)”这样的内容。什么都没有发生,所以我为子SWFLoader设置了trustContent=true——但是它根本不会加载,所以我阅读了关于跨域策略文件的内容,并按照描述设置了一个——什么都没有完成。