![]() |
Как правильно создать систему множества кнопок.
Какой из 2-х вариантов грамотней:
Первый вариант: Добавляя на сцену кнопку, я так же создаю на ней слушателя, и каждой кнопке присваиваю ID, после сработки слушателя, я просто вынимаю через event ID. (Этот вариант мне не нравиться, ибо количество слушателей будет равно, кол-ву кнопок) Второй вариант: Добавляя на сцену кнопку, отправлять ей ID. На сцену добавить один единственный EventListener, и при сработке кнопки, отправлять этот ID. Какой из этих вариантов правильней и экономичней? |
не могу судить какой способ правильный (пусть это делают профи)
я всегда исользую контейнер с кнопками, на который вешаю слушатель. Кнопке присваиваю name и потом в хендлере ловлю e.tagret.name |
Цитата:
|
По-моему кнопка должна быть самодостаточным и удобным в использовании элементом. Потому на неё вешаются слушатели автоматом уже при создании, чтоб обслуживать простоту задания обработчика клика и передачу туда параметра. По-моему пользователь сойдёт с ума от числа кнопок гораздо быстрее, чем появятся проблемы от слушателей) Т.е. экономичней 2-й, но первый должен быть тем, что делается почти автоматом, а для 2-го надо переколбасить класс кнопки.
|
а, речь идет о классе Кнопки... я чето подумал что Кнопка - обычный спрайт-мувик.
Цитата:
|
Способов не меряно ))
Например, при создании панели кнопок кидать каждую кнопку в массив, а потом при нажатии какой-либо кнопки получать из события таргетный объект и находить его в массиве. Потом по индексу массива предпринимать действия. Но самое тупое - это создавать простые кнопки в цикле, каждой кнопке присваивать имя, содержащее индекс, а потом после нажатия кнопки парсить имя таргетного объекта и получат из него индекс. |
а не проще ли отнаследоваться от компонента и добаивть нужное поле если таковое отсутствует? тебе ведь всеравно только одно значение в него запихнуть нужно, так что класс по сути будет состоять из нескольких строк
|
Цитата:
|
"самое тупое" - не означало "глупо до безобразия" :)
я вообще-то сторонник простых решений Помимо "красоты" решений надо еще помнить о сопровождении кода потом. Ну, чтобы через два месяца не глядеть на собственный код с вопросом "интересно, как это работает и зачем тут вот эта зеленая штучка?" Причем, как бывает иногда, именно эту "зеленую штучку" и нельзя трогать, потому что где-то что-то отваливается. Но это так, лирика. На вопрос автора, очевидно, ответ такой - лучше выработать одно решение и единообразно его применять в разных приложениях. А за количество листенеров, имхо, бороться в подавляющем большинстве случаев бессмысленно. Их же не тысячи. |
Цитата:
понял вас товарищ! |
Обычно когда на сцене нужно разместить серию кнопок - они добавляются туда согласно каким-то данным
Поэтому удобнее использовать список ренререров - оборачиваем кнопку в рендерер, в рендерере перехватываем клик и посылаем всплывающиее событие с полем data Вешаем единственный листенер на список и действуем в нем согласно данным плюс обычно рядом с кнопкой в списке нужно еще какое-то пояснение приписать, т.е. рендерер не просто хранит данные а еще что-то отображает Получаем понятную и гибкую структуру, которую, к тому же можно скроллить, сортировать и фильровать, рисовать стрелочки в рендерере для туториала Если у нас другая ситуация - просто много кнопок - то они настолько уникальны, что лучше и удобнее повесить по листенеру на кнопку и выполнить специфичные действия в каждом листенере. Т.е. проблемы - "много кнопок в много листенеров" просто не возникает |
expl, ну вот мне тоже кажется, что datа в evente, это отличный вариант.
|
| Часовой пояс GMT +4, время: 01:04. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.