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

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

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

Регистрация: Aug 2013
Сообщений: 73
По умолчанию Получение информации от dispatchEvent.

Доброго времени суток. Есть подобие магазина, из которого диспатчаться события, при нажатии на кнопку товара.

На данный момент я прописываю в классе Shop для каждого из товаров:

Код AS3:
public static const BUY_MEET:String = "meet";
public static const BUY_GRASS:String = "grass";
public static const BUY_CARROT:String = "carrot";
Проверяю какая кнопка нажата и диспатчу соответствующее событие:

Код AS3:
private function foodBtnMouseDown(e:MouseEvent):void {   // обрабатывает события мыши
 var newName:String = String(e.currentTarget);
 var nameObj:String = newName.substring(8, (newName.length - 2));
 switch(nameObj) {
 case "Meet": 
	dispatchEvent(new Event(BUY_MEET));
 break;
 case "Grass":
	dispatchEvent(new Event(BUY_GRASS));
 break;
 case "Carrot":
	dispatchEvent(new Event(BUY_CARROT));
 break;
 }
}
События регистрируются в другом классе, на созданный в нём экземпляр класса магазина, где они и ловятся:

Код AS3:
shop.addEventListener(Shop.BUY_MEET, buy);
shop.addEventListener(Shop.BUY_GRASS, buy);
shop.addEventListener(Shop.BUY_CARROT, buy);
Когда товаров в магазине несколько штук, такой подход вполне подходит, но если их там становится больше сотни... Возникает вопрос: каким образом можно диспатчить одно событие на все товары магазина (например: dispatchEvent(new Event(BUY))), при этом передавая в нём информацию о том, какая кнопка в магазине нажата?

Можно отправлять эту информацию через аргументы в функцию, но нужно именно dispatch'ом.

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

Регистрация: Mar 2013
Сообщений: 1,864
Присвойте свойствам имен значение констант и тогда получится -
Код AS3:
private function foodBtnMouseDown(e:MouseEvent):void {   // обрабатывает события мыши
 var newName:String = String(e.currentTarget);
 var nameObj:String = newName.substring(8, (newName.length - 2));
 dispatchEvent(new Event(nameObj));
}

Старый 13.03.2014, 20:43
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 3  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
Всё было так просто. Большое спасибо, Akopalipsis!

Старый 13.03.2014, 20:43
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Воспользуйтесь кастомными событиями и передавайте необходимую информацию внутри.
__________________
тут я

Старый 13.03.2014, 20:53
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 5  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
КорДум, подскажите пожалуйста как можно передать через кастомное событие что-то?

Старый 13.03.2014, 20:59
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Вот, например, первая ссылка в гугле:
http://stackoverflow.com/questions/1...added-data-as3
__________________
тут я

Старый 13.03.2014, 21:27
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 7  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
КорДум, Спасибо.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Ту ту руу! Человек-сигнал спешит на помощь!
Посоветую самый простой способ передавать параметры со своими событиями - СИГНАЛЫ

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Это довольно непростой способ, который при попытке получить "функционал баблинга" создает много проблем.
ТС, же проще использовать Dictionary, [button => eventType]
__________________
местонахождение

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Посоветую самый простой способ передавать параметры со своими событиями
Не самый простой вариант. С ними разобраться сложнее, чем с событиями
Как по мне, так эти сигналы вообще фигня какая-то

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

Теги
//

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

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


 


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


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