Форум 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=144560)

Tr1te 15.09.2010 12:18

Как правильно создать систему множества кнопок.
 
Какой из 2-х вариантов грамотней:

Первый вариант:
Добавляя на сцену кнопку, я так же создаю на ней слушателя, и каждой кнопке присваиваю ID, после сработки слушателя, я просто вынимаю через event ID.
(Этот вариант мне не нравиться, ибо количество слушателей будет равно, кол-ву кнопок)

Второй вариант:
Добавляя на сцену кнопку, отправлять ей ID. На сцену добавить один единственный EventListener, и при сработке кнопки, отправлять этот ID.

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

3p.station 15.09.2010 13:02

не могу судить какой способ правильный (пусть это делают профи)

я всегда исользую контейнер с кнопками, на который вешаю слушатель. Кнопке присваиваю name и потом в хендлере ловлю e.tagret.name

Bgg 15.09.2010 13:10

Цитата:

Сообщение от 3p.station (Сообщение 936063)
не могу судить какой способ правильный (пусть это делают профи)

я всегда исользую контейнер с кнопками, на который вешаю слушатель. Кнопке присваиваю name и потом в хендлере ловлю e.tagret.name

Не лень прописывать в нескольких местах name то?

-De- 15.09.2010 13:18

По-моему кнопка должна быть самодостаточным и удобным в использовании элементом. Потому на неё вешаются слушатели автоматом уже при создании, чтоб обслуживать простоту задания обработчика клика и передачу туда параметра. По-моему пользователь сойдёт с ума от числа кнопок гораздо быстрее, чем появятся проблемы от слушателей) Т.е. экономичней 2-й, но первый должен быть тем, что делается почти автоматом, а для 2-го надо переколбасить класс кнопки.

3p.station 15.09.2010 14:18

а, речь идет о классе Кнопки... я чето подумал что Кнопка - обычный спрайт-мувик.

Цитата:

Не лень прописывать в нескольких местах name то?
а как по другому ? весь во внимании :)

mikhailk 15.09.2010 14:36

Способов не меряно ))

Например, при создании панели кнопок кидать каждую кнопку в массив, а потом при нажатии какой-либо кнопки получать из события таргетный объект и находить его в массиве. Потом по индексу массива предпринимать действия.

Но самое тупое - это создавать простые кнопки в цикле, каждой кнопке присваивать имя, содержащее индекс, а потом после нажатия кнопки парсить имя таргетного объекта и получат из него индекс.

nOobCrafter 15.09.2010 14:57

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

3p.station 15.09.2010 15:03

Цитата:

Сообщение от mikhailk (Сообщение 936098)
Способов не меряно ))

Например, при создании панели кнопок кидать каждую кнопку в массив, а потом при нажатии какой-либо кнопки получать из события таргетный объект и находить его в массиве. Потом по индексу массива предпринимать действия.

Но самое тупое - это создавать простые кнопки в цикле, каждой кнопке присваивать имя, содержащее индекс, а потом после нажатия кнопки парсить имя таргетного объекта и получат из него индекс.

хех ... я походу очень туп :umnik2:

mikhailk 15.09.2010 17:49

"самое тупое" - не означало "глупо до безобразия" :)
я вообще-то сторонник простых решений

Помимо "красоты" решений надо еще помнить о сопровождении кода потом. Ну, чтобы через два месяца не глядеть на собственный код с вопросом "интересно, как это работает и зачем тут вот эта зеленая штучка?"

Причем, как бывает иногда, именно эту "зеленую штучку" и нельзя трогать, потому что где-то что-то отваливается. Но это так, лирика.

На вопрос автора, очевидно, ответ такой - лучше выработать одно решение и единообразно его применять в разных приложениях. А за количество листенеров, имхо, бороться в подавляющем большинстве случаев бессмысленно. Их же не тысячи.

3p.station 15.09.2010 17:55

Цитата:

Сообщение от mikhailk (Сообщение 936151)
Помимо "красоты" решений надо еще помнить о сопровождении кода потом. Ну, чтобы через два месяца не глядеть на собственный код с вопросом "интересно, как это работает и зачем тут вот эта зеленая штучка?"

Причем, как бывает иногда, именно эту "зеленую штучку" и нельзя трогать, потому что где-то что-то отваливается. Но это так, лирика.

хехе :quiet: оказывается не только у меня так :D

понял вас товарищ!

expl 15.09.2010 21:25

Обычно когда на сцене нужно разместить серию кнопок - они добавляются туда согласно каким-то данным
Поэтому удобнее использовать список ренререров - оборачиваем кнопку в рендерер, в рендерере перехватываем клик и посылаем всплывающиее событие с полем data

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

Получаем понятную и гибкую структуру, которую, к тому же можно скроллить, сортировать и фильровать, рисовать стрелочки в рендерере для туториала

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

Т.е. проблемы - "много кнопок в много листенеров" просто не возникает

Tr1te 15.09.2010 23:11

expl, ну вот мне тоже кажется, что datа в evente, это отличный вариант.


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

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