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

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

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

Регистрация: Jan 2012
Сообщений: 97
По умолчанию создание произвольного количества кнопок и прослушивание их событий

Вопрос хоть и ламерский, но ответа найти не могу((
вообщем есть у меня много элементов, типа пользователи и у каждого есть своя кнопочка, как можно все эти кнопки вывести на показ и отслеживать события происходящие при их нажатии

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

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

Регистрация: Nov 2010
Сообщений: 150
Сделай одного слушателя и кастомное событие, куда будет передеваться идентификатор конкретного пользователя либо другая нужная информация.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
kelod, зачем Вам разные обработчики? Вы собираетесь делать разные действия с пользователями?
Stitch512, зачем создавать кастомное событие, если ссылка на кнопку есть в обычном MouseEvent? Кастомный MouseEvent Вы не создадите, а если надо просто передать айдишник кнoпки/юзера, то есть дефолтный DataEvent.
__________________
Reality.getBounds(this);

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

Регистрация: Nov 2010
Сообщений: 150
Иногда удобнее в событие передать необходимые данные для обработки, чем получать их потом на строковому идентификатору, но если необходимости в этом нет то да, можно и дефолтным событием. Вообще зависит от задачи, но я абстрактным событиям типа MouseEvent предпочитаю пользовательские, меньше телодвижений для получения нужной информации в обработчике.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
"Абстрактные события"? Не, не слышал. Событие без реализации, без экземпляра?
"событиям типа MouseEvent предпочитаю пользовательские" – боюсь только, InteractiveObject не разделяет Ваших вкусов.
Расскажите, как Вы ловите клик по объекту, не подписываясь на MouseEvent?
__________________
Reality.getBounds(this);

Старый 24.01.2012, 10:52
kelod вне форума Посмотреть профиль Отправить личное сообщение для kelod Найти все сообщения от kelod
  № 6  
Ответить с цитированием
kelod

Регистрация: Jan 2012
Сообщений: 97
я всё равно сто то не пойму, если сделать 1 событие на несколько кнопок, как я узнаю которая нажата? не могли бы Вы привести примерчик кода, хотя бы приблизительный

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

Регистрация: May 2010
Сообщений: 543
узнать, какая нажата кнопка, можно с помощью свойства currentTarget объекта MouseEvent.

Код AS3:
..
button.addEventListener(MouseEvent.CLICK, _onClick);
..
private function _onClick(e:MouseEvent):void{
   trace("Нажата кнопка: " + e.currentTarget);
}
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 24.01.2012, 12:08
kelod вне форума Посмотреть профиль Отправить личное сообщение для kelod Найти все сообщения от kelod
  № 8  
Ответить с цитированием
kelod

Регистрация: Jan 2012
Сообщений: 97
кажется разобрался, присвоил кнопкам имена и теперь можно их через currentTarget.name различать)

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

Регистрация: Jan 2012
Сообщений: 22
совершенно верно.
А вот так можно к любому объекту обратиться по имени
Код AS3:
private function getObjectByName(n:String,par:DisplayObjectContainer):DisplayObject{
for (var i:int = 0;i<par.numChildren;i++)
{
if (par.getChildAt(i).name==n) {return par.getChildAt(i);} else {if (par.getChildAt(i) is DisplayObjectContainer) {
var t:DisplayObject = getObjectByName(n,DisplayObjectContainer(par.getChildAt(i)));
if (t!=null) {return t}}}
}
return null;
}
Передаешь в функцию имя и контейнер, в котором объект предположительно находится. Ищет только отображаемые объекты(естественно). Роет вглубь, так что если объект является чайлдом объекта par в н-ом поколении, все равно находит. В общем случае в par можно передать просто stage.


Последний раз редактировалось booksmaster; 24.01.2012 в 12:28.
Старый 24.01.2012, 14:05
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 10  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Код AS3:
Расскажите, как Вы ловите клик по объекту, не подписываясь на MouseEvent?
Я и не говорил что не подписываться. Кнопку и все необходимые данные помещаем в класс-контейнер, в нем подписываемся на MouseEvent по нему шлем события к примеру ButtonClick с нужными данными, по сути MouseEvent получается инкапсулировано и извне видно только событие данного контейнера. Если потом внутренняя логика поменяется - вместо кнопки какая то анимация, либо пользовательская кнопка у которой другая логика работы, или что угодно, то это эти изменения будут только внутрение.

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

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

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


 


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


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