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

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

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

Регистрация: Dec 2014
Сообщений: 312
По умолчанию Экземпляр какого класса придет в листенер

Когда подписываешься на событие, как узнать экземпляр какого класса придет в листенер?

Можно, наверно, написать в комментарии к метатегу Event. Какие еще есть варианты?

UPDATED!
Не читайте эту тему. Читайте сразу продолжение.

http://www.flasher.ru/forum/showthread.php?t=210420


Последний раз редактировалось callme; 11.03.2015 в 19:14.
Старый 11.03.2015, 12:10
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 2  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Если я правильно вас понял, то event.currentTarget даёт ответ на вопрос.
__________________
Нормально делай — нормально будет!

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

Регистрация: Apr 2009
Сообщений: 409
Странная задача, и скорее всего не правильная.
currentTarget - возвращает только тот объект на который вы подписались. target - работает и с детьми.
Так вы получите ссылку на объект который сгенерировал событие, дальше чтобы узнать по ней класс, используйте getQualifiedClassName

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

Регистрация: Dec 2014
Сообщений: 312
У меня другая задача.

Пример. Если собака проголодалась, она отправляет событие HungerEvent.

Код AS3:
var dog:Dog = new Dog();
dog.addEventListener(DogEvents.HUNGER, listener);
 
function listener( сноска* ):void
{
 
}
*как, не заглядывая в код собаки, узнать, что сюда придет экземпляр класса HungerEvent?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А сюда в этом случае не придет никакого HungerEvent. Сюда придет DogEvents (если конечно DogEvents - это событие). Если же нет, то архитектура не правильная.
И зачем заглядывать в код собаки, если уже есть подписка на DogEvents.HUNGER?
Странная какая-то задача. Если нужно узнать на какие события можно вообще подписать собаку, то это делается указанием метатегов Event. В этом случае IDE покажет на какие события можно подписаться

п.с. У каждого события есть свойство type. Вот его и можно посмотреть. Но, опять же, если все правильно сделано, и код события написан не або как

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

Регистрация: Dec 2014
Сообщений: 312
А если такой пример.

Собака может родить либо щенка, либо котенка. При этом собака отправляет событие TransportEvent.

Код AS3:
public function TransportEvent(cargo:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
    super(type, bubbles, cancelable);
    _cargo = cargo;
}

Вариант реализации #1

Код AS3:
var dog:Dog = new Dog();
dog.addEventListener(DogEvents.DOG_BIRTH, listener);
 
function listener(event:TransportEvent)
{
 
}

Вариант реализации #2

Код AS3:
var dog:Dog = new Dog();
dog.addEventListener(TransportEvent.TRANSPORT, listener);
 
function listener(event:TransportEvent)
{
    if (event.cargo is Dog) ...
}

Какой из этих двух вариантов правильный и почему?



P.S. Переменная cargo типа Object потому что я не хочу создавать кучу классов, которые будут отличаться от TransportEvent только типом переменной cargo.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
callme, caseyryan хотел сказать, что намного удобнее писать все данные в DogEvent и отправлять его. Отправлять другой ивент просто нелогично.
В смысле, что отправляйте тот ивент, на который подписываетесь, как в случае с любым нативным для платформы(MouseEvent.SOME_EVENT отправляет MouseEvent, KeyboardEvent.SOME_EVENT отправляет KeyboardEvent и т.д., а соответствующие пуш-событийные данные суются в KeyboardEvent.keyCode, MouseEvent.x/y)
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 11.03.2015 в 13:42.
Старый 11.03.2015, 14:08
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 8  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Было

Код AS3:
package
{
	public class DogEvent
	{
		static public const DOG_BIRTH:String = "dogBirth";
        static public const CAT_BIRTH:String = "catBirth";		
	}
}
Стало

Код AS3:
package
{
	public class DogEvent extends TransportEvent
	{
		static public const DOG_BIRTH:String = "dogBirth";
        static public const CAT_BIRTH:String = "catBirth";		
 
		public function DogEvent(cargo:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(cargo, type, bubbles, cancelable);
		}
	}
}
Не находите, что наследование выглядит как-то глупо?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Они должны быть как минимум логичны.
Ну как может быть DogEvent.CAT_BIRTH ?
Собака рожает кота?
Вам нужно избавиться от такой ненужной путаницы. Константы событий должны быть ясными и понятными, а названия событий соответствовать объектам, которые их отправляют. И станет намного проще.
Если есть кот, то он должен порождать CatEvent.
Но еще логичнее в данном случае привязать события вообще к самому действию.
Например AnimalEvent.BIRTH, AnimalEvent.DEATH и т.д. А DogEvent и CatEvent использовать только для случаев. которые относятся конкретно к коту и собаке, и никак иначе. Например DogEvent.BARF или CatEvent.MEOW

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

Регистрация: Dec 2014
Сообщений: 312
Продолжение темы тут

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

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

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


 


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


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