flash.display.Loader блокирует загрузку в сборке релиза - PullRequest
1 голос
/ 26 апреля 2010

Я загружаю SWF-файл из моей программы, написанной на as3, используя класс flash.display.Loader. Когда я использую конфигурацию отладочной сборки во 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, и счетчик «В кадре X» начинает увеличиваться. Отладочная сборка выдает тот же вывод, но без остановки.

Не все SWF-файлы, которые я пытался загрузить, вызывают проблему. Размер файла не влияет ни на что. Я попытался скомпилировать и запустить на другом компьютере с тем же результатом.

Что может вызвать эту проблему?

Редактировать: я заметил, что если программа скомпилирована с debug = true, запуск флеш-плеера занимает около двух секунд, то же самое время заморозки флеш-плеера при отладке = false.

1 Ответ

0 голосов
/ 26 апреля 2010

Это не прямой ответ на вашу проблему, но есть некоторые задокументированные ошибки, связанные с запуском событий Event.COMPLETE для загрузчиков в среде Flash Player, а именно сразу после запуска игрока и если свойство wmode имеет для определенных значений.

Возможно, вы сталкиваетесь с одним из этих двух вариантов, поскольку ваши версии отладчика и выпуска могут работать с разным временем запуска или настройками wmode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...