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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.11.2013, 18:23
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 91  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Добавлено через 15 минут
Пользовательские события - это когда Вв класс создаете, как у Вас в примере.
Слушаете Вы его так:
Код AS3:
addEventListener(MyEvent.СТРОКОВАЯ_КОНСТАНТА,handler);
а посылаете вот так:
Код AS3:
dispatchEvent(new MyEvent(MyEvent.СТРОКОВАЯ_КОНСТАНТА));
так будет выглядеть слушатель:
Код AS3:
private function handler(event:MyEvents):void
{
 
}
В примере, который показывали выше нет собственного события, там только собственная константа.
Событию абсолютно без разницы, какую ему константу дадут, лишь бы только String.
Смотрите в чем разница:
Код AS3:
addEventListener(GameEvents.REMOVE_CHILD,handler);
Код AS3:
dispatchEvent(new Event(GameEvents.REMOVE_CHILD));
Код AS3:
private function handler(event:Events):void
{
 
}
Так будет выглядеть класс с константой:
Код AS3:
package 
{
	public class GameEvents 
	{
		public static const REMOVE_CHILD:String = "remove_child";
	}
}
И вот когда Вы послали в ребёнке событие удаления, в родителе поймали и удалили того, кто послал:
Код AS3:
private function handler(event:Event):void
{
	var child:DisplayObject = event.target as DisplayObject;
	removeChild(child);
}
Надеюсь не где не запутался.

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Код AS3:
child.addEventListener(GameEvents.REMOVE_CHILD, handler);
//**********************
private function handler(event:Event):void
{
	var child:DisplayObject = event.currentTarget as DisplayObject;
	removeChild(child);
}
В любом случае подписываемся не на себя, а на чилда.
А в подписках я бы рекомендовал реже использовать таргет и чаще карентТаргет. КарентТаргет - это на кого подписывались. Таргет, это от кого прилетело. В данном случае совпадет. Но При условии бабблинга события, могут быть сюрпризы, потому рекомендую вырабатывать привычку подписки таки на карентТаргет. И таргет использовать только там и именно там, где это необходимо исходя из задачи (например без этого не обойтись с многослойными интерфейсами и бабблингом, или же со всякими там редиспатчами по дереву моделей).

В остальном всё верно.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 14.11.2013, 18:32
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 93  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
А в подписках я бы рекомендовал реже использовать таргет и чаще карентТаргет.
Dukobpa3 Спасибо! Учту! я просто не когда currentTarget отличающийся от target не видел, но Вы обьяснили причину и мне понятно. Баблинг ещё не разу не использовал

Старый 14.11.2013, 19:01
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 94  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Смотрите в чем разница:
Спасибо за подробное объяснение. Ловля отправителя - очень полезная штука!
Я попробовал, как Вы объяснили - всё работает так же, как и раньше, когда я делал через MyEvent.
В чём же отличие способов, кроме того, что в одном случае мы при распространении события создаём экземпляр собственного класса MyEvent, а в другом - стандартный Event?

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
В чём же отличие способов, кроме того
Мвахах
Да собственно в этом и есть отличие
Зачем вам свое событие для такой мелочи? Свое событие надо создавать если в нем будут передаваться какие-то особенные данные или в таком духе. А если просто имя - так стандартного за глаза. И свою константу добавить и ок.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 14.11.2013, 19:32
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 96  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
Свое событие надо создавать если в нем будут передаваться какие-то особенные данные или в таком духе.
Я это и имел в виду. Если мне, например, нужно будет через событие передать значение какой-то переменной (первое, что приходит на ум - банальная сумма набранных очков при проигрыше и переходе в меню), то тут уже не обойтись без собственного события, так?
И в этом случае, если уж оно всё равно есть, проще использовать его, просто дописав константу в свойства класса, чтобы все собственные константы были в одном месте - собственном событии.
Правильно рассуждаю?

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Правильно но не для всех ситуаций.
У нас есть еще стандартное событие DataEvent. У которого есть одно дополнительное поле data:String. Вцелом для подавляющего большинства событий со своими данными - этой строки дополнительной хватает.
Даже если передать одну цифру очков переведенную строку, выглядеть будет не так красиво как со своим событием, но обойдемся без доп-класса. А вцелом я адепт мвц и стараюсь в событиях ничего никуда не передавать. Если что-то нужно передать, это можно зафиксировать в модели. Отправляем событие, получаем событие, видим что в модель нужно заглянуть и посмотреть на новые данные. Вполне ок схема.

А сам список констант по ситуации можно хранить в глобальном классе-списке констант, как был в примере у Akopalipsis, можно в классе, который диспатчит это событие (удобно и правильно так делать если это событие не диспатчит никто другой)
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 14.11.2013, 20:38
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 98  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
А сам список констант по ситуации можно хранить в глобальном классе-списке констант
Это плохо.
Разовью холивар.
Бывает, что заводят констаны в классе публикующем событие.
И любой, кто подписывается на это событие (константу), тянет весь класс.
Я сторонник заведения отдельного класса события, ничем не отличающегося от Event, кроме списка констант. Это позволяет в хороших иде генерить хэндлеры именно этого события и генерить ошибки, если приходит совпадающее строковое имя эвента, но другого типа.
__________________
Отряд Котовскага

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
Я сторонник заведения отдельного класса события, ничем не отличающегося от Event, кроме списка констант. Это позволяет в хороших иде генерить хэндлеры именно этого события и генерить ошибки, если приходит совпадающее строковое имя эвента, но другого типа.
Не хочу холиварить, скажу только что сам так раньше делал, потом отказался ибо оверхед.
В итоге в основном юзаю дефолтные события. Константы храню в отдельном классе ибо хреново если:
Цитата:
любой, кто подписывается на это событие (константу), тянет весь класс
Так и живем.
Вообще я не люблю плодить лишних сущностей. Из-за мвц головного мозга их и так не мало получается, наворачивать еще в других местах не оч охота. А то при определенном кол-ве классов, классиков и прочих сущностей, сложно становится контролировать это всё.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 14.11.2013, 22:18
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 100  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
А то при определенном кол-ве классов, классиков и прочих сущностей, сложно становится контролировать это всё.
Гораздо проще контролировать несколько кастомных эвентов, в каждом из которых десяток констант события, и каждый из которых используется в одной логической части проекта. Чем хранить в одном классе список констант, юзать Event, и иметь любом в хэндлере один тип на всё, и чуть-что трейсить константы. Чем этот способ-свалка удобнее, объясните пожалуйста.

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

Теги
видимость , классы , композиция , методы , свойства

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

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


 


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


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