|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2009
Сообщений: 77
|
как создать кнопку с семью состояниями?
Пожалуйста, присоветуйте, как сделать кнопку, чтобы у неё было семь состояний: отжата (“_up”, “_over”, “_down”) , нажата (“_up”, “_over”, “_down”) , отключена. Первое, что приходит в голову: написать класс расширяющий Sprite, в котором создать три объекта: Sprite изображающий отключенное состояние и два Simple Button - один “кнопка нажата”, другой “кнопка отжата”. Красота!, нужно добавить всего лишь один слушатель MouseEvent.MOUSE_UP и добавлять/удалять один из трёх означенных объектов из списка отображения в зависимости от ситуации. Одна беда: если отпустить кнопку мыши над такой кнопкой сначала Simple Button вернётся в состояние “_over”, только потом наступит событие MOUSE_UP, т.е. я не успеваю удалить объект Simple Button из списка отображения, до того как он вернётся в “_over” - как результат, моргает!
Но думается мне, так кнопки строить “неправильно”, подскажите как “правильно”, схему в общих чертах. |
|
|||||
Спрайт, семь картинок, смена вида по событиям.
Плюс параметр "состояние", при смене состояния отжата/нажата/отключена - менять подписки на события. Тут только не запутаться куда как подписываться и от чего когда отписываться. Проще всего сделать вообще одной картинкой, но разные фильтры накладывать на каждое состояние, но не уверен что это подойдет к необходимому дизайну.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Забить на SimpleButton - ибо это вообще хлам.
Создать 2 мувика - один для отображения состояний кнопки если она не нажата, другой для всех состояний когда нажата. Добавить оба мувика в один спрайт, но у одного из них сделать свойство visible = false; при изменении состояний нажата / не нажата менять у них свойство visible. Этот вариант проще всего. |
|
|||||
Регистрация: Jul 2009
Сообщений: 77
|
Dukobpa3 Да, но в описанном мной методе есть одно преимущество: всё, что касается отображения кнопок (события “_up”, “_over”, “_down”) находится внутри класса, вне объекта кнопки мне нужно лишь слушать MOUSE_UP, из родителя кнопки (меню, например, где этих кнопок может быть много) сказать объекту кнопки, в каком она состоянии, нажатом, отжатом или выключена. Один слушатель на всё меню.
В описанном же Вами методе мне придётся в родителе (в меню, например) создать три слушателя и управлять всеми семью состояниями из родителя. Т.е. по сути, можно вообще обойтись без класса кнопки. Не буду же я в каждой кнопке ставить по три слушателя, у меня этих кнопок уже несколько десятков в четырёх меню. Я раньше делал MovieClip с семью кадрами, по сути тоже самое. Впрочем, я спрашиваю как “правильно”, т.е. профессионально, если сказанное Вами так и есть, что ж смирюсь, буду делать так. Последний раз редактировалось filepark; 04.06.2011 в 17:18. |
|
|||||
Один раз создать класс "awesomeButtonWith7States" и потом его пользовать никто не запрещал)
Создать такой вот класс с семью кадрами/картинками Один раз попариться продумать кто чего там слушает и как реагирует А потом все ваши менюшки делать из этих кнопок. Только надо еще озадачитсья чтоб кнопка слала ивенты наружу какие-то типа "батон_в_зажатом_состоянии_кликнули"/"батон_в_отпущенном_состоянии_кликнули" А не просто на клики по ним подписываться, ибо если просто на клики то придется еще и в родителе доп-аналитику вести в каком же состоянии была кнопка когда по ней кликнули. В том подходе который вы описали есть и минус абалденный.... Там вот эти две кнопки имеют каждая свои слушатели, и очень маловероятно что вам удастся согласовать полностью разорванные объекты. А так у вас будет один объект и проще будет с этим всем заморачиваться.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Jul 2009
Сообщений: 77
|
т.е придётся в каждой кнопке ставить свои три слушателя... надеялся этого избежать... понятно, спасибо.
|
|
|||||
Я не совсем понимаю что должно получиться в итоге....
У кнопки семь состояний но работать она должна как обычная кнопка что ли? Есть еще такое понятие как бабблинг чтоб можно было слушать не каждую кнопку а меню в целом.... Огласите пожалуйста весь список задач. Добавлено через 8 минут есть класс "крутая кнопка" в этом классе есть семь картинок-спрайтов-мувиков - как вам удобнее этот класс слушает свои события либо события этих картинок и меняет свой вид в зависимости от этого так это этот класс опять же сам себя слушаетна предмет кликов, и в зависимости от текущего состояни отправляет наружу событие "кликнули зажатую кнопку"/"кликнули отжатую кнопку" - это событие должны быть bubbles = true - чтобы всплывало по дисплей листу пока его не остановят всё. Теперь есть класс меню, у которого внутри есть пачка этих кнопок, и дальше уже в зависимости от набора задач меню оно может либо само слушать события этих кнопок (именно те которые продиспатчили вручную("кликнули зажатую кнопку"/"кликнули отжатую кнопку"), а не клики, это два события на кнопку), или же в меню можно вообще кнопки не слушать, а слушать просто само меню в родителе меню. Родитель в котором будет лежать меню получит все события кнопок (для этого нам выше нужно было bubbles = true). И как-то отреагирует на них. Добавлено через 10 минут Цитата:
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Да, но мувики можно контролировать как хочешь, а эти кнопки себя всегда ведут одинаково
|
|
|||||
Регистрация: Jul 2009
Сообщений: 77
|
Об этом я и говорю. Каждая кнопка может быть нажата, отжата и выключена. Сейчас у меня один слушатель в меню MOUSE_UP, который смотрит какую кнопку кликнули, при этом диспатчит событие в объект основного класса. Там думают, и говорят сначала меню, а тот, в свою очередь, этой и другим кнопкам, в какое состояние им перевестись (нажата, отжата и выключена). Сейчас ни меню, ни вышестоящего родителя совершенно не интересует, как и когда каждая кнопка будет отображать события “_up”, “_over”, “_down”, - это дело самой кнопки, в зависимости от состояния.
Если же я буду делать спрайт с семью картинками (или семикадровый мувиклип), то мне придётся либо в каждой кнопке установить по три слушателя (MOUSE_OVER , MOUSE_OUT, MOUSE_UP), при этом слушателей будет очень много. Либо передать эти функции вышестоящему меню, но тогда класс кнопки вовсе будет не нужен. Меню будет говорить каждой кнопке в каком из семи состояний ей быть, что по-моему, очень неудобно. Флуд: К сожалению, я не знаю как работает Simple Button и насколько меньше памяти будет тратиться на использование двух Simple Button (по моему теперешному рецепту), по сравнению с использованием Sprite с тремя слушателями. :-(. Я не знаю какое событие диспатчит Simple Button (и диспатчит ли вообще) когда над ним отпускается кнопка мыши, его можно было бы остановить и предотвратить переход из состояния “_down” в “_over” (это единственное, что меня сейчас неустраивает). Но я предполагаю, что мой подход в корне неправильный, потому и спрашиваю, как правильно. Последний раз редактировалось filepark; 04.06.2011 в 18:32. |
Часовой пояс GMT +4, время: 17:33. |
|
« Предыдущая тема | Следующая тема » |
|
|