瞬间更换swf

时间:2010-10-03 19:49:43

标签: actionscript-3

只是寻找关于某事的想法(试图使这个描述更短但没有成功):

我希望能够即时更新swf - 我的意思是不要刷新它直到它的整个新版本完全就绪,然后立即替换浏览器窗口中的现有内容(而不是现有的)页面被删除,然后是灰色屏幕,然后是页面的增量重建。

实际上我有一个方法可以实现这一点:swf上的所有东西都在画布上,所以我在幕后创建一个新画布,用所有新控件重新填充它,然后当一切准备就绪时,显示这个新画布并摧毁旧的。

但奇怪的是,实际建立新页面的时间实际上要比我刚刚在自己的网页上将其新版本放在单独的swf中并显示新网页需要两倍的时间。 (所以2秒对1秒)。但是,如果新版本在其自己的网页上,那么您将使现有页面消失,被灰色屏幕取代,然后是新页面的增量构建(增量构建仅需要一秒钟 - 但仍然不是效果我要去。)

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

或者,如果有一种方法,我目前不知道只用html做这一切(即只有当新页面完全准备好时才立即替换浏览器窗口中的整个html页面)那么那就是也很棒。

2 个答案:

答案 0 :(得分:0)

您似乎建议使用shell / preloader,例如最小的SWF处理外部SWF的加载/卸载/转换。我认为你实际上已经解释了你的自我:)

要记住的事情(从我的脑海中开始):

  • 确保在卸载旧SWF之前完全控制启动/停止进程并释放内存。在这种情况下,一个好的做法是共享一个公共接口,以便shell一致地访问您的文档类。 (例如启用/禁用/缩放)
  • 小心使用相同或相同名称的类,因为首先加载的类不会被覆盖。

答案 1 :(得分:0)

我想出了一个方案,我的应用程序在同一个应用程序中的新SWFLoader中克隆自己。这明显更快(即只是在新的SWFLoader中重新创建整个重新配置的应用程序,而不是重新配置已经加载的应用程序。)可能与FP优化新应用程序的加载过程这一事实有关。

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