2009-06-13 3 views
1

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

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 флэш-ловушка.

ответ

0

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

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

3

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

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); 
} 

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

+0

Большое спасибо за усилия и время. Кажется, я понял, в чем проблема. Я отправлю ответ. –

+0

Нет проблем. Я никогда не сталкивался с этим, поэтому спасибо, что сэкономили нам некоторое время, разделив это. –

Смежные вопросы