Как определить общее количество событий initProgress, исходящих от прелоадера? - PullRequest
1 голос
/ 10 февраля 2009

Предварительный загрузчик флэш-памяти генерирует события FlexEvent.INIT_PROGRESS, чтобы сообщить о ходе инициализации приложения флэш-памяти. Однако количество раз отправки этого события зависит от самого приложения.

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

Есть ли программный способ дать хотя бы оценку по этому значению?

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

Ответы [ 4 ]

1 голос
/ 25 января 2010

Класс mx.preloaders.DownloadProgressBar использует, казалось бы, значение aribtrary 12:

private var _initProgressTotal:uint = 12;

// [...]

protected function initProgressHandler(event:Event):void
{
    // [...]

    var loaded:Number = 100 * _initProgressCount /
    (_initProgressTotal - _displayStartCount);

    // [...]
}

Я не знаю, откуда они берут это значение, но, похоже, оно работает достаточно хорошо для Adobe ...?

1 голос
/ 18 июля 2009

Не беспокойтесь об общем количестве слишком много, по моему опыту, это должно происходить так быстро, что нет необходимости быть полностью точным. Если вы проведете несколько тестов и обнаружите, что их число составляет около 14, то просто вручную установите в индикаторе выполнения максимум максимум 20. Например, пользователи по-прежнему будут видеть, что панель быстро заполняется, поскольку она не отображается на экране очень долго. никого не волнует, если это абсолютно точно.

0 голосов
/ 12 февраля 2009

Вы должны основывать свой индикатор выполнения на bytesLoaded / bytesTotal, а не на количестве вызовов обработчика.

Например:

preloader.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onPreloaderProgress);

Затем в вашем обработчике сделайте что-то вроде этого:

function onPreloaderProgress(e:ProgressEvent):void
{
    progress = e.bytesLoaded / e.bytesTotal;
}
0 голосов
/ 11 февраля 2009

Может быть, это событие запускается каждый раз при инициализации компонента?

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

...