Индикатор прогресса с помощью flash.display.Loader - PullRequest
1 голос
/ 13 июня 2009

Мне нужно сделать простой индикатор прогресса при загрузке изображения на фоне. Я использую класс flash.display.Loader в том, что кажется стандартным способом. Проблема в том, что, хотя я вижу, что flash.display.LoaderInfo регулярно запускает ProgressEvent.PROGRESS с использованием трассировки, динамически обновляемый текст (или любой другой графический объект) обновляется только один раз, когда загрузка заканчивается. Похоже, что обновление дисплея поставлено в очередь и вызвало только одно обновление в конце. Это упрощенная версия функции, которая инициирует загрузку:

public function init()
{
    var loader : Loader = new Loader(); 
    var request : URLRequest = new URLRequest(this.imageSrc); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, updateProgress);
    loader.load(request);
}

и это обработчик события:

private function updateProgress(event : ProgressEvent) : void
{
    progressIndicator.text = event.bytesLoaded + " / " + event.bytesTotal;
    trace(event.bytesLoaded + " / " + event.bytesTotal);
}

Я прошу прощения за, вероятно, элементарный вопрос. Я не часто использую Flash. Но мне кажется, что я делаю разумную и интуитивную вещь. Это должно быть около 101 ловушки Flash.

Ответы [ 2 ]

3 голосов
/ 13 июня 2009

Я просто вставил ваш код в новую версию и попробовал его, с небольшими изменениями (из класса в код временной шкалы, ничего особенного).

    import flash.events.ProgressEvent;

var progressIndicator:TextField = new TextField();
addChild(progressIndicator);
progressIndicator.autoSize = "left";
progressIndicator.border = true;

var loader : Loader = new Loader(); 
    var request : URLRequest = new URLRequest("kernel_params.swf"); 
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, updateProgress);
    loader.load(request);

function updateProgress(event : ProgressEvent) : void
{
    progressIndicator.text = event.bytesLoaded + " / " + event.bytesTotal;
    trace(event.bytesLoaded + " / " + event.bytesTotal);
}

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

0 голосов
/ 13 июня 2009

Кажется, что ответ довольно скучный. Моя проблема заключалась в том, что во время разработки я использовал автономный проигрыватель Flash (дважды щелкнул SWF-файл или запустил его в Adove Flash CS3). Проблема, очевидно, заключалась в том, что изображения уже были кэшированы, что привело к нескольким быстрым последовательным вызовам Event.PROGRESS. Когда я позже попробовал SWF-файл в браузере и регулярно очищал кеш браузера, изображения каждый раз загружались, как и ожидалось.

Полагаю, загадкой было то, что, несмотря на то, что изображения были кэшированы, я получил несколько событий Event.PROGRESS (около 3 или около того) и предположил, что это просто очень грубая детализация. Если бы я измерил время между событиями, я бы, вероятно, быстрее обнаружил, что происходит.

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