Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Изменение event.bytesTotal в собственном прелоадере (http://www.flasher.ru/forum/showthread.php?t=150383)

AntonSurkont 10.02.2011 18:51

Изменение event.bytesTotal в собственном прелоадере
 
Здравствуйте уважаемые программисты.
Я сделал собственный прелоадер во Flex проекте. Тут полный код класса прелоадера.
Я отображаю процента загрузки следующим образом
Код AS3:

public override function set preloader(preloader:Sprite):void {                   
  preloader.addEventListener(ProgressEvent.PROGRESS, onSWFDownloadProgress);   
  ...
}
...
private function onSWFDownloadProgress(event:ProgressEvent):void {
  var t:Number = event.bytesTotal;
  var l:Number = event.bytesLoaded;
  var p:Number = Math.round((l/t) * 100);
  tField.text="Loading... "+p+"%";
  tField.setTextFormat(tFormat);
}

Дело в том, что переменная event.bytesTotal изменяется (хотя по идее этого не должно быть). Сначала она равна 3 600 000 байтам, потом 4 200 000 и так несколько раз увеличивается в процессе загрузки. И у меня из-за этого загрузка доходит до 100% потом становится 85% потом опять 100% это мне очень не нравится, может кто знает подскажите плиз.

alatar 10.02.2011 19:45

RSL используются?

AntonSurkont 11.02.2011 13:39

Вы имеете ввиду это:
Код AS3:

public override function set preloader(preloader:Sprite):void {                   
  preloader.addEventListener(ProgressEvent.PROGRESS, onSWFDownloadProgress);   
  preloader.addEventListener(Event.COMPLETE, onSWFDownloadComplete);
  preloader.addEventListener(FlexEvent.INIT_PROGRESS, onFlexInitProgress);
  preloader.addEventListener(FlexEvent.INIT_COMPLETE, onFlexInitComplete);
 
  // Я добавил это строчку
  preloader.addEventListener(RSLEvent.RSL_PROGRESS,rslListener);
 
  ...
}
...
private function rslListener(event:RSLEvent):void {
  var t:Number = event.bytesTotal;
  var l:Number = event.bytesLoaded;
  var p:Number = Math.round((l/t) * 100);
  tField.text="Loading... "+p+"%";
  tField.setTextFormat(tFormat);
}

Если вы имели ввиду это, то это не помогло перепады в процентах еще хуже чем были, уже бывает до 100% доходит потом на 16 сбрасывает и опять до 100

alatar 11.02.2011 14:01

Я имел ввиду, что preloader отдает значения bytesTotal / bytesLoaded для всего. И приложения и RSL. Вот так:
Код AS3:

private function getByteValues():Object
{
        var li:LoaderInfo = root.loaderInfo;
        var loaded:int = li.bytesLoaded;
        var total:int = li.bytesTotal;
 
        // Look up the rsl bytes and include those
        var n:int = rslListLoader ? rslListLoader.getItemCount() : 0;
        for (var i:int = 0; i < n; i++)
        {
                loaded += rslListLoader.getItem(i).loaded;
                total += rslListLoader.getItem(i).total;
        }
 
        return { loaded: loaded, total: total };
}
...
var bytes:Object = getByteValues();
var loaded:int = bytes.loaded;
var total:int = bytes.total;
 
// Dispatch a progress event (later we might conditionalize this
// so that it isn't sent on a cache load).
dispatchEvent(new ProgressEvent(ProgressEvent.PROGRESS,false, false, loaded, total));

Это надо учитывать.
Кстати, какой смысл был наследоваться от DownloadProgressBar, если вы не используете его методы? Достаточно наследоваться от Sprite, главное реализовать IPreloaderDisplay.

AntonSurkont 11.02.2011 14:27

Скажите плиз откуда взялась переменная rslListLoader, я что то не могу разобратся

alatar 11.02.2011 14:40

Это часть кода класса mx.preloaders.Preloader. Я его привел, что бы показать какие данные содержит bytesTotal / bytesLoaded.

AntonSurkont 11.02.2011 15:37

Цитата:

Я имел ввиду, что preloader отдает значения bytesTotal / bytesLoaded для всего. И приложения и RSL.
...
Это надо учитывать.
Извините, но я не понимаю как это учитывать.

alatar 11.02.2011 17:32

Посмотрите как сделано в DownloadProgressBar.
Исходник лежит в:
{путь_к_билдеру}\sdks\{версия SDK}\frameworks\projects\framework\src\mx\preloaders\

AntonSurkont 11.02.2011 18:41

Большое вам спасибо alatar за то что откликнулись.

Я сделал так может кому пригодится.

alatar 11.02.2011 19:53

На будущее. Если решили выложить код, то можно это сделать на форуме в расширенном режиме ответа. Так вложения не будут зависеть от внешних ресурсов.


Часовой пояс GMT +4, время: 18:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.