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

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

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

Регистрация: Jul 2009
Сообщений: 77
По умолчанию как создать кнопку с семью состояниями?

Пожалуйста, присоветуйте, как сделать кнопку, чтобы у неё было семь состояний: отжата (“_up”, “_over”, “_down”) , нажата (“_up”, “_over”, “_down”) , отключена. Первое, что приходит в голову: написать класс расширяющий Sprite, в котором создать три объекта: Sprite изображающий отключенное состояние и два Simple Button - один “кнопка нажата”, другой “кнопка отжата”. Красота!, нужно добавить всего лишь один слушатель MouseEvent.MOUSE_UP и добавлять/удалять один из трёх означенных объектов из списка отображения в зависимости от ситуации. Одна беда: если отпустить кнопку мыши над такой кнопкой сначала Simple Button вернётся в состояние “_over”, только потом наступит событие MOUSE_UP, т.е. я не успеваю удалить объект Simple Button из списка отображения, до того как он вернётся в “_over” - как результат, моргает!

Но думается мне, так кнопки строить “неправильно”, подскажите как “правильно”, схему в общих чертах.

Старый 04.06.2011, 14:59
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 2  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Спрайт, семь картинок, смена вида по событиям.

Плюс параметр "состояние", при смене состояния отжата/нажата/отключена - менять подписки на события.

Тут только не запутаться куда как подписываться и от чего когда отписываться. Проще всего сделать вообще одной картинкой, но разные фильтры накладывать на каждое состояние, но не уверен что это подойдет к необходимому дизайну.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 04.06.2011, 15:02
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Забить на SimpleButton - ибо это вообще хлам.
Создать 2 мувика - один для отображения состояний кнопки если она не нажата, другой для всех состояний когда нажата. Добавить оба мувика в один спрайт, но у одного из них сделать свойство visible = false;
при изменении состояний нажата / не нажата менять у них свойство visible.
Код AS3:
pressedButton.visible = false;
unpressedButton.visible = true;
Этот вариант проще всего.

Старый 04.06.2011, 15:08
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 4  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
goodguy, кажись это не отличается ничем от того что автор делает Только и того что вместо батона свои мувики.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 04.06.2011, 17:13
filepark вне форума Посмотреть профиль Отправить личное сообщение для filepark Найти все сообщения от filepark
  № 5  
Ответить с цитированием
filepark

Регистрация: Jul 2009
Сообщений: 77
Dukobpa3 Да, но в описанном мной методе есть одно преимущество: всё, что касается отображения кнопок (события “_up”, “_over”, “_down”) находится внутри класса, вне объекта кнопки мне нужно лишь слушать MOUSE_UP, из родителя кнопки (меню, например, где этих кнопок может быть много) сказать объекту кнопки, в каком она состоянии, нажатом, отжатом или выключена. Один слушатель на всё меню.

В описанном же Вами методе мне придётся в родителе (в меню, например) создать три слушателя и управлять всеми семью состояниями из родителя. Т.е. по сути, можно вообще обойтись без класса кнопки. Не буду же я в каждой кнопке ставить по три слушателя, у меня этих кнопок уже несколько десятков в четырёх меню. Я раньше делал MovieClip с семью кадрами, по сути тоже самое.

Впрочем, я спрашиваю как “правильно”, т.е. профессионально, если сказанное Вами так и есть, что ж смирюсь, буду делать так.


Последний раз редактировалось filepark; 04.06.2011 в 17:18.
Старый 04.06.2011, 17:21
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 6  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Один раз создать класс "awesomeButtonWith7States" и потом его пользовать никто не запрещал)

Создать такой вот класс с семью кадрами/картинками
Один раз попариться продумать кто чего там слушает и как реагирует
А потом все ваши менюшки делать из этих кнопок.

Только надо еще озадачитсья чтоб кнопка слала ивенты наружу какие-то типа "батон_в_зажатом_состоянии_кликнули"/"батон_в_отпущенном_состоянии_кликнули"

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

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

Старый 04.06.2011, 17:34
filepark вне форума Посмотреть профиль Отправить личное сообщение для filepark Найти все сообщения от filepark
  № 7  
Ответить с цитированием
filepark

Регистрация: Jul 2009
Сообщений: 77
т.е придётся в каждой кнопке ставить свои три слушателя... надеялся этого избежать... понятно, спасибо.

Старый 04.06.2011, 17:38
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 8  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Я не совсем понимаю что должно получиться в итоге....

У кнопки семь состояний но работать она должна как обычная кнопка что ли?

Есть еще такое понятие как бабблинг чтоб можно было слушать не каждую кнопку а меню в целом....

Огласите пожалуйста весь список задач.

Добавлено через 8 минут
есть класс "крутая кнопка"
в этом классе есть семь картинок-спрайтов-мувиков - как вам удобнее
этот класс слушает свои события либо события этих картинок и меняет свой вид в зависимости от этого
так это этот класс опять же сам себя слушаетна предмет кликов, и в зависимости от текущего состояни отправляет наружу событие "кликнули зажатую кнопку"/"кликнули отжатую кнопку" - это событие должны быть bubbles = true - чтобы всплывало по дисплей листу пока его не остановят

всё.

Теперь есть класс меню, у которого внутри есть пачка этих кнопок, и дальше уже в зависимости от набора задач меню оно может либо само слушать события этих кнопок (именно те которые продиспатчили вручную("кликнули зажатую кнопку"/"кликнули отжатую кнопку"), а не клики, это два события на кнопку), или же в меню можно вообще кнопки не слушать, а слушать просто само меню в родителе меню. Родитель в котором будет лежать меню получит все события кнопок (для этого нам выше нужно было bubbles = true). И как-то отреагирует на них.

Добавлено через 10 минут
Цитата:
т.е придётся в каждой кнопке ставить свои три слушателя... надеялся этого избежать...
И чего избегать то? Кнопка должна быть мертвым грузом на сцене и молчать? Как же она с внешним миром будет общаться кроме событий.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 04.06.2011, 18:05
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 9  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
goodguy, кажись это не отличается ничем от того что автор делает Только и того что вместо батона свои мувики.
Да, но мувики можно контролировать как хочешь, а эти кнопки себя всегда ведут одинаково

Старый 04.06.2011, 18:15
filepark вне форума Посмотреть профиль Отправить личное сообщение для filepark Найти все сообщения от filepark
  № 10  
Ответить с цитированием
filepark

Регистрация: 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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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