Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как из одного класса в другой передать ProgressEvent URLLoadera? (http://www.flasher.ru/forum/showthread.php?t=184046)

olexandr 09.09.2012 03:08

"пробросить" в моем понимании, это - dispatch(e.clone()) - просто продиспатчить копию события
можно сразу передавать проценты - e.bytesLoaded / e.bytesTotal
как передавать - тоже масса вариантов. можно добавить параметр в кастомное событие, можно сделать приватную переменную для этого с публичным геттером.

fish_r 09.09.2012 03:50

Цитата:

Сообщение от olexandr (Сообщение 1095276)
можно добавить параметр в кастомное событие, можно сделать приватную переменную для этого с публичным геттером.

DataEvent - тоже вариант.

КорДум 09.09.2012 12:34

Цитата:

"пробросить" в моем понимании, это - dispatch(e.clone()) - просто продиспатчить копию события
clone вызовется у "е" сам, если написать
Код AS3:

dispatchEvent(e);


olexandr 09.09.2012 13:09

Цитата:

Сообщение от КорДум (Сообщение 1095285)
clone вызовется у "е" сам, если написать
http://www.flasher.ru/forum/images/r..._collapsed.gif Код AS3:
dispatchEvent(e);

раньше я тоже так писал, но периодически возникала необъяснимая ошибка на стадии выполнения
мне дали совет, писать clone в таких случаях - больше такой ошибки у меня не было

КорДум 09.09.2012 13:12

Цитата:

раньше я тоже так писал, но периодически возникала необъяснимая ошибка на стадии выполнения
Мистика. Достаточно посмотреть дебаггером, чтобы понять, что разницы нет. Это как у инта вызывать toString() при конкатенации со строкой. Так и здесь - неявный вызов clone().

Abdilxamidov 09.09.2012 17:38

Цитата:

Сообщение от КорДум (Сообщение 1095285)
clone вызовется у "е" сам, если написать
"пробросить" в моем понимании, это - dispatch(e.clone()) - просто продиспатчить копию события

Спасибо.
я правильно понял, что это нужно прописать в обработчике ProgressEvent в 1-м классе,
и потом во втором классе в "e" уже будет передаваться из первого процессниг загрузки?

Вот есть одни класс Apparat, в нем вот обработчик URLLoadera


Код AS3:

private function progress_phpLoader(e:ProgressEvent):void {
  dispatch(e.clone());
}

Вот есть другой класс, в нем пишу:

Код AS3:

private var Apparat1:Apparat = new Apparat();
...
Apparat1.addEventListener(Apparat.DATA_1_2_PROGRESS, dataLoading);
private function dataLoading(e:ProgressEvent):void {
 percent = e.bytesLoaded/e.bytesTotal*100);
}

Т.е. percent будет хранить процент в первом классе загруженных данных, так?

КорДум 09.09.2012 18:01

В Apparat у вас такой код:
Код AS3:

private function loader_progressHandler(event:ProgressEvent):void {
    dispatchEvent(new ProgressEvent(Apparat.DATA_1_2_PROGRESS, false, false, event.bytesLoaded, event.bytesTotal));
}

А в классе, который ловит это событие (переменные по конвенции принято с маленькой буквы называть):
Код AS3:

apparat1.addEventListener(Apparat.DATA_1_2_PROGRESS, apparat1_data12ProgressHandler);
...
private function apparat1_data12ProgressHandler(event:ProgressEvent):void {
  // юз проперти от event, Люк!
}

То есть Apparat у нас диспатчит событие ProgressEvent с типом Apparat.DATA_1_2_PROGRESS и теми же самыми свойствами, что находятся в event непосредственно от лоадера.

Следует упомянуть мне, что если типов для прогресса всего лишь один, может стоит воспользоваться обычным передиспатчиванием, а не создавать другой экземпляр ивента (не клона)? То есть тупо такая штука.
Код AS3:

_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS /*или как там*/, dispacthEvent);


Abdilxamidov 09.09.2012 18:32

Цитата:

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

Код AS3:

_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS /*или как там*/, dispacthEvent);


Да, прогресс один. А в какое место это писать?

КорДум 09.09.2012 18:35

Где к лоадеру подписывались раньше.

Добавлено через 1 минуту
Ну и ловить надо будет уже не Apparat.DATA_1_2_PROGRESS, а ProgressEvent.PROGRESS, естественно.


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

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