Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   создание произвольного количества кнопок и прослушивание их событий (http://www.flasher.ru/forum/showthread.php?t=174372)

kelod 24.01.2012 02:16

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

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

Stitch512 24.01.2012 04:27

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

Wolsh 24.01.2012 04:39

kelod, зачем Вам разные обработчики? Вы собираетесь делать разные действия с пользователями?
Stitch512, зачем создавать кастомное событие, если ссылка на кнопку есть в обычном MouseEvent? Кастомный MouseEvent Вы не создадите, а если надо просто передать айдишник кнoпки/юзера, то есть дефолтный DataEvent.

Stitch512 24.01.2012 05:51

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

Wolsh 24.01.2012 07:33

"Абстрактные события"? Не, не слышал. Событие без реализации, без экземпляра?
"событиям типа MouseEvent предпочитаю пользовательские" – боюсь только, InteractiveObject не разделяет Ваших вкусов.
Расскажите, как Вы ловите клик по объекту, не подписываясь на MouseEvent?

kelod 24.01.2012 10:52

я всё равно сто то не пойму, если сделать 1 событие на несколько кнопок, как я узнаю которая нажата? не могли бы Вы привести примерчик кода, хотя бы приблизительный

carrotoff 24.01.2012 11:05

узнать, какая нажата кнопка, можно с помощью свойства currentTarget объекта MouseEvent.

Код AS3:

..
button.addEventListener(MouseEvent.CLICK, _onClick);
..
private function _onClick(e:MouseEvent):void{
  trace("Нажата кнопка: " + e.currentTarget);
}


kelod 24.01.2012 12:08

кажется разобрался, присвоил кнопкам имена и теперь можно их через currentTarget.name различать)

booksmaster 24.01.2012 12:25

совершенно верно.
А вот так можно к любому объекту обратиться по имени
Код 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.

Stitch512 24.01.2012 14:05

Код AS3:

Расскажите, как Вы ловите клик по объекту, не подписываясь на MouseEvent?

Я и не говорил что не подписываться. Кнопку и все необходимые данные помещаем в класс-контейнер, в нем подписываемся на MouseEvent по нему шлем события к примеру ButtonClick с нужными данными, по сути MouseEvent получается инкапсулировано и извне видно только событие данного контейнера. Если потом внутренняя логика поменяется - вместо кнопки какая то анимация, либо пользовательская кнопка у которой другая логика работы, или что угодно, то это эти изменения будут только внутрение.


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

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