flash.display.Loader阻止发布版本中的加载

时间:2010-04-26 09:30:18

标签: actionscript-3 flash loader flashdevelop

我正在使用flash.display.Loader类从as3编写的程序中加载一个swf文件。当我在FlashDevelop中使用调试版本配置时,一切正常。但是当我使用发布版本配置时,程序会在加载程序发送进度事件之后和发送完整事件之前冻结大约两秒钟。

这是我的计划:

package
{
 import flash.display.Loader;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.ProgressEvent;
 import flash.net.URLRequest;
 import flash.system.LoaderContext;
 import flash.system.ApplicationDomain;
 import flash.text.TextField;

 public class Main extends Sprite {
  private var frameCounter:int;
  private var frameCounterField:TextField = new TextField;
  private var statusField:TextField = new TextField;

  function Main():void {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }

  private function init(e:Event = null):void {
   removeEventListener(Event.ADDED_TO_STAGE, init);
   addEventListener(Event.ENTER_FRAME, frame);

   frameCounterField.text = "On frame " + frameCounter.toString();
   addChild(frameCounterField);

   statusField.y = 40;
   statusField.width = 300;
   addChild(statusField);

   var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
   var urlReq:URLRequest = new URLRequest("SomeFile.swf");
   var loader:Loader = new Loader();

   loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
   loader.load(urlReq, context);
  }

  private function frame(event:Event):void {
   frameCounterField.text = "On frame " + (++frameCounter).toString();
  }

  private function onProgress(event:ProgressEvent):void {
   statusField.appendText("Progress on frame: " + frameCounter.toString() +
   " Loaded: " + event.bytesLoaded + " / " + event.bytesTotal + "\n");
  }

  private function onComplete(event:Event):void {
   statusField.appendText("Completed on frame: " + frameCounter.toString() + "\n");
  }
 }
}

在版本中,我在第一帧获得以下输出:

On frame 1

Progress on frame: 1 Loaded: 0 / 182468
Progress on frame: 1 Loaded: 65536 / 182468
Progress on frame: 1 Loaded: 131072 / 182468
Progress on frame: 1 Loaded: 182468 / 182468

程序冻结大约两秒后,添加了行Completed on frame: 2,并且'On frame X'计数器开始计时。调试版本生成相同的输出但没有冻结。

并非我尝试加载的所有swf文件都会触发问题。文件的大小似乎不会影响任何东西。我尝试在另一台计算机上编译并运行相同的结果。

什么可能导致这个问题?

编辑:我注意到如果程序是用debug = true编译的,那么flash player需要大约两秒钟才能启动,当debug = false时,flash播放器被冻结的时间相同。

1 个答案:

答案 0 :(得分:0)

这不是您问题的直接答案,但是在Flash Player环境中为加载程序触发Event.COMPLETE事件有一些记录错误 - 即immediately following player startupif the wmode property is set到某些值。

由于您的调试器和发行版本可能在不同的启动时间或wmode设置下运行,因此您可能会对这两个中的一个发生变化。