Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.02.2011, 18:51
AntonSurkont вне форума Посмотреть профиль Отправить личное сообщение для AntonSurkont Найти все сообщения от AntonSurkont
  № 1  
Ответить с цитированием
AntonSurkont
 
Аватар для AntonSurkont

Регистрация: Dec 2009
Сообщений: 122
По умолчанию Изменение 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% это мне очень не нравится, может кто знает подскажите плиз.

Старый 10.02.2011, 19:45
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
RSL используются?

Старый 11.02.2011, 13:39
AntonSurkont вне форума Посмотреть профиль Отправить личное сообщение для AntonSurkont Найти все сообщения от AntonSurkont
  № 3  
Ответить с цитированием
AntonSurkont
 
Аватар для AntonSurkont

Регистрация: Dec 2009
Сообщений: 122
Вы имеете ввиду это:
Код 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

Старый 11.02.2011, 14:01
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Я имел ввиду, что 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.


Последний раз редактировалось alatar; 11.02.2011 в 14:04.
Старый 11.02.2011, 14:27
AntonSurkont вне форума Посмотреть профиль Отправить личное сообщение для AntonSurkont Найти все сообщения от AntonSurkont
  № 5  
Ответить с цитированием
AntonSurkont
 
Аватар для AntonSurkont

Регистрация: Dec 2009
Сообщений: 122
Скажите плиз откуда взялась переменная rslListLoader, я что то не могу разобратся

Старый 11.02.2011, 14:40
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Это часть кода класса mx.preloaders.Preloader. Я его привел, что бы показать какие данные содержит bytesTotal / bytesLoaded.


Последний раз редактировалось alatar; 11.02.2011 в 14:48.
Старый 11.02.2011, 15:37
AntonSurkont вне форума Посмотреть профиль Отправить личное сообщение для AntonSurkont Найти все сообщения от AntonSurkont
  № 7  
Ответить с цитированием
AntonSurkont
 
Аватар для AntonSurkont

Регистрация: Dec 2009
Сообщений: 122
Цитата:
Я имел ввиду, что preloader отдает значения bytesTotal / bytesLoaded для всего. И приложения и RSL.
...
Это надо учитывать.
Извините, но я не понимаю как это учитывать.

Старый 11.02.2011, 17:32
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Посмотрите как сделано в DownloadProgressBar.
Исходник лежит в:
{путь_к_билдеру}\sdks\{версия SDK}\frameworks\projects\framework\src\mx\preloaders\

Старый 11.02.2011, 18:41
AntonSurkont вне форума Посмотреть профиль Отправить личное сообщение для AntonSurkont Найти все сообщения от AntonSurkont
  № 9  
Ответить с цитированием
AntonSurkont
 
Аватар для AntonSurkont

Регистрация: Dec 2009
Сообщений: 122
Большое вам спасибо alatar за то что откликнулись.

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

Старый 11.02.2011, 19:53
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
На будущее. Если решили выложить код, то можно это сделать на форуме в расширенном режиме ответа. Так вложения не будут зависеть от внешних ресурсов.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
Flex4

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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