Предварительный загрузчик Flash AS3 не отображается до 100%

Я понимаю, что об этом спрашивали и отвечали много раз, но даже после некоторого чтения я не могу исправить проблему. Что у меня есть: прелоадер. Игра, которая должна произойти после прелоадера. Что на самом деле происходит: все компоненты загружаются до прелоадера, что делает прелоадер бесполезным, ха-ха. Я изменил «Экспорт классов в кадре 1» на «кадр 2», но безрезультатно. Я бы предпочел не использовать внешний прелоадер.

Вот мой код:

   stop();

 this.addEventListener(Event.ENTER_FRAME, loading);

 function loading(e:Event):void{

    var total:Number = this.stage.loaderInfo.bytesTotal;
    var loaded:Number = this.stage.loaderInfo.bytesLoaded;

    preloader.scaleX = loaded/total;

 if (total == loaded){
    nextFrame();
    this.removeEventListener(Event.ENTER_FRAME, loading);
}

}

А вот это:

https://pp.vk.me/c630919/v630919494/37371/sgdJTWian6Q.jpg

Что я делаю неправильно?


person Neil Bergfalk    schedule 09.07.2016    source источник
comment
Вы знаете, как устанавливать точки останова в коде и запускать отладчик? Если вы можете это сделать, вы, вероятно, решите это сами. Я всегда отслеживаю значения до окна вывода.   -  person Neal Davis    schedule 09.07.2016
comment
@NealDavis Ну, я вообще трассирую "1" в JS, когда поленился. Вы выполняете это в классе?   -  person Klaider    schedule 10.07.2016
comment
Убедитесь, что у вас есть только предварительный загрузчик на 1 кадре, и ничего больше. И убедитесь, что вы не экспортируете ресурсы из своей библиотеки в кадр 1. Flash ВСЕГДА загружает первый кадр, прежде чем что-либо делать, поэтому что-то еще там   -  person Philarmon    schedule 11.07.2016
comment
Вам следует проверить две вещи. Во-первых, определите размер кадра. Если ваш кадр 1 составляет 99% SWF, вы сделали что-то не так. Если он небольшой, но проблема не устранена, мне известно о поведении IE11, которое сначала полностью загружает SWF и только затем отображает окно проигрывателя Flash, делая предварительный загрузчик бесполезным. Мне неизвестны другие браузеры, которые ведут себя подобным образом, но это может быть тенденцией.   -  person Vesper    schedule 15.07.2016
comment
вы тестируете, загружая swf напрямую? в этом случае попробуйте встроить его в html-страницу.   -  person alebianco    schedule 21.07.2016


Ответы (2)


Вы должны попытаться добавить слушателя с помощью this.root.loaderInfo (этот способ лучше, хотя ваш способ работает в этом состоянии, так что не беда).

  1. Не нужно менять «классы экспорта в кадре 1 => 2», просто оставьте значение по умолчанию;
  2. Код первого кадра может быть таким:
    import flash.events.ProgressEvent; this.root.loaderInfo.addEventListener(ProgressEvent.PROGRESS,loaderProgressHandler); function loaderProgressHandler(evt:ProgressEvent):void { preloader.scaleX = evt.bytesLoaded /evt.bytesTotal; }
  3. Код второго кадра (который вы действительно хотите показать) выглядит следующим образом:
    stop();
  4. Вот и все. Возможно, вы не можете четко увидеть прогресс, потому что скорость локальной симуляции слишком высока. Вы можете попробовать «Моделировать загрузку» дважды с помощью сочетания клавиш «Ctrl + Enter».
person Tsubasa Yeung    schedule 11.07.2016

Чтобы избежать путаницы с кадрами экспорта классов, я обычно использую второй SWF для предварительной загрузки. Работает отлично. Вам просто нужно убедиться, что вы очистили всю память в фильме загрузчика после загрузки большого SWF. Таким образом, вы можете сохранить супер-упрощенный предзагрузчик. В некоторых проектах я просто использовал тот же предзагрузчик для времени ожидания подключения к игровому серверу. Он универсален и не беспокоит основную логику вашего приложения.

person PippoApps.com    schedule 12.07.2016