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

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

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

Регистрация: Jan 2008
Адрес: Земля
Сообщений: 178
По умолчанию Правильное клонирование кастомных событий

Всем доброго дня!

Не могу понять на каком этапе происходит клонирование моего пользовательского события, которое после этого превращается в простой объект класса Event из моего ApplicationEvent.

Есть объект Application, который рассылает события об активации и деактивации:
Код AS3:
this.dispatchEvent(new ApplicationEvent(ApplicationEvent.ACTIVATE_EVENT, this));
// ......
this.dispatchEvent(new ApplicationEvent(ApplicationEvent.DEACTIVATE_EVENT, this));
Метод клонивания в самом ApplicationEvent:
Код AS3:
override public function clone():Event
{
   if (this.disposed) 
      throw new IllegalOperationError("Can't clone disposed model event!");
 
   return new ApplicationEvent(this.type, this.appModel);
}
Назначение прослушивания:
Код AS3:
Application.instance.addEventListener(ApplicationEvent.ACTIVATE_EVENT, onActivate);
Application.instance.addEventListener(ApplicationEvent.DEACTIVATE_EVENT, onDeactivate);
Прослушиватели:
Код AS3:
static private function onActivate(e:ApplicationEvent):void
{
   // ......
}
static private function onDeactivate(e:ApplicationEvent):void
{
   // ......
}
При возникновении события и поступления его в прослушиватель пишет "Не могу преобразовать flash.events.Event в ApplicationEvent"!

Если поменять
Код AS3:
static private function onActivate(e:Event):void
{
   // ......
}
static private function onDeactivate(e:Event):void
{
   // ......
}
то, конечно, всё прекрасно - но это не очень красивый выход

Вообще, при каких условиях flash занимается самостоятельным клонированием события?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
после этого превращается в простой объект класса Event из моего ApplicationEvent
Цитата:
override public function clone():Event
Он не превращается, все равно прилетает ApplicationEvent.

Все остальное в хелпе
Цитата:
класс EventDispatcher вызывает его автоматически при повторной отправке события, то есть, при вызове dispatchEvent(event) из обработчика события event.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Что содержится в константах ACTIVATE_EVENT и DEACTIVATE_EVENT?
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Jan 2008
Адрес: Земля
Сообщений: 178
Цитата:
Он не превращается, все равно прилетает ApplicationEvent.
Да, я знаю что так должно быть. Но у меня где-то получается так, что прилетает обычные Event, который не интерпретируется как мой кастомный эвент.
Подумал может я что-то не знаю про клонирование, может где-то super.clone() или что-то подобное происходит.

Добавлено через 6 минут
Цитата:
Сообщение от alatar Посмотреть сообщение
Что содержится в константах ACTIVATE_EVENT и DEACTIVATE_EVENT?
А, да точно, спасибо! Не подумал об этом, содержится "activate" и "deactivate", заменил на "activateEvent" и "deactivateEvent".
Но всё равно не понятно, даже если так. Все объекты, наследуемые от flash.events.EventDispatcher, самостоятельно рассылают flash.events.Event-события "activate" и "deactivate?


Последний раз редактировалось RAlfDog; 21.04.2016 в 15:01.
Старый 21.04.2016, 15:16
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Да и об этом прямо написано в документации.
В итоге вы получаете не свое событие, а страндартное, так как слушатели регистрируются по строке (строковому типу события).
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Jan 2008
Адрес: Земля
Сообщений: 178
Ясно, спасибо!

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

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

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


 


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


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