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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.11.2013, 16:35
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 41  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Так вроде овер\аут не как не должны трогать модель, а значит и обрабатывать эти события нужно в виде.
И наверное, если от клика происходят изменения только в виде, то и клик нужно в нем же обрабатывать.

Старый 06.11.2013, 19:54
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 42  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Babylon, честно, не понял о чем ты. А ты предлагаешь, размещая в приложении контрол сложнее кнопки, например контрол для выбора цвета, подписываться на все его текстовые поля, кнопки, движки и экранчики с цветами прямо из основного Вида? В чем тогда, простите, смысл компонентов? А вообще в чем смысл абстрагирования в объекты/классы?
Не простому тупому контейнеру "ради контейнера", а родителю, имеющему Замысел относительно своего ребенка. Я приводил в пример составной контрол, а не пустой спрайт.
__________________
Reality.getBounds(this);

Старый 06.11.2013, 22:28
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 43  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Так вроде овер\аут не как не должны трогать модель, а значит и обрабатывать эти события нужно в виде.
И наверное, если от клика происходят изменения только в виде, то и клик нужно в нем же обрабатывать.
Да, кнопка сама подписывается на овер.аут.даун.клик и т.п. внутри себя. И меняет своё отображение и только. А вот хэндлер клика, который, собственно, отвечает за действие (а не отображение) кнопки лучше описывать в родителе. Благо as3 позволяет множественные хэндлеры на одно событие.
__________________
Отряд Котовскага

Старый 06.11.2013, 23:16
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 44  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Уолш, я в принципе не против твоего подхода. Единственная коллизия в том, что придется переписать слушателей при смене контейнера. Хотя может так и надо.

Старый 07.11.2013, 00:53
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 45  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Да, кнопка сама подписывается на овер.аут.даун.клик и т.п. внутри себя. И меняет своё отображение и только. А вот хэндлер клика, который, собственно, отвечает за действие (а не отображение) кнопки лучше описывать в родителе. Благо as3 позволяет множественные хэндлеры на одно событие.
До этой святой истины дойдут все рано или поздно. Причем это настолько гибкий метод, что можно делать много разных плюшек внутри такой кнопки и делать ее независимой , уникальной.

Код AS3:
package XXX 
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.text.TextField;
 
	/**
	 * ...
	 * @author in4core progression lab
	 */
	public class EvaluteButton extends MovieClip 
	{
		public var tf:TextField;
 
		private var _overColor:int = 0xFFFFFF;
		private var _outColor:int;
		private var _disableColor:int = 0x000000;
 
		private var _frames4:Boolean = false;
 
		public function EvaluteButton() 
		{
			if (tf) 
			{
				this._outColor = tf.textColor;
				this._disableColor = this._outColor;
			}
			this.mouseChildren = false;
			this.tabEnabled = false;
			this.buttonMode = true;
			this.mouseEnabled = true;
			this.gotoAndStop(1);
			this.addEventListener(MouseEvent.MOUSE_OVER , onMouseOver);
			this.addEventListener(MouseEvent.MOUSE_OUT , onMouseOut);
		}
 
		public function set frame4(b:Boolean):void
		{
			this._frames4 = b;
			this.addEventListener(MouseEvent.CLICK , onClick);
		}
 
		private function onClick(e:MouseEvent):void 
		{
 
			if (this.currentFrame > 2) this.gotoAndStop(2);
			else this.gotoAndStop(4);
		}
 
		public function onMouseOver(e:MouseEvent):void
		{
			if (_frames4 && this.currentFrame > 2) this.gotoAndStop(4);
			else this.gotoAndStop(2);
			if (tf) tf.textColor = this._overColor;
 
		}
 
		public function onMouseOut(e:MouseEvent):void
		{
			if (_frames4 && this.currentFrame > 2) this.gotoAndStop(3);
			else this.gotoAndStop(1);
			if (tf) tf.textColor = this._outColor;
 
		}
 
		public function disable():void
		{
			this.buttonMode = false;
			this.mouseEnabled = false;
			this.tabEnabled = false;
			//this.gotoAndStop(2);
			this.alpha = 0.5
			if (tf) tf.textColor = this._disableColor;
			this.removeEventListener(MouseEvent.MOUSE_OVER , onMouseOver);
			this.removeEventListener(MouseEvent.MOUSE_OUT , onMouseOut);
		}
		public function enable():void
		{
			this.buttonMode = true;
			this.mouseEnabled = true;
			this.alpha = 1
			this.gotoAndStop(1);
			if (tf) tf.textColor = this._outColor;
			this.addEventListener(MouseEvent.MOUSE_OVER , onMouseOver);
			this.addEventListener(MouseEvent.MOUSE_OUT , onMouseOut);
		}
 
		public function setTextOverColor(color:int):void
		{
			this._overColor = color;
		}
		public function setTextOutColor(color:int):void
		{
			this._outColor = color;
		}
		public function setTextDisableColor(color:int):void
		{
			this._disableColor = color;
		}
 
		public function setColors(colors:Array):void
		{
			setTextOverColor(colors[0]);
			setTextOutColor(colors[1]);
			setTextDisableColor(colors[2]);
		}
	}
 
}
Это конечно грязная реализация, точнее так надо, для набросков, но не суть. Зато понятно о чем говорил Котяра.
__________________
Марк Tween

Старый 07.11.2013, 12:27
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 46  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
До этой святой истины дойдут все рано или поздно. Причем это настолько гибкий метод, что можно делать много разных плюшек внутри такой кнопки и делать ее независимой , уникальной.
Святой истины? Настолько гибко? Ты это точно о кнопочке, которая при наведении цвет меняет?
Цитата:
Это конечно грязная реализация, точнее так надо, для набросков, но не суть. Зато понятно о чем говорил Котяра.
О чем говорил Котяра понятно из сообщения котяры. И то что это "грязный набросок за 2 минуты" можно не упомянуть: ты за 4 года ни разу не показал то, что называешь "чистым".

Старый 07.11.2013, 12:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 47  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не понимаю, как можно писать this. перед приватами (а чьи еще-то?) и свойствами суперкласса (где должно быть super.), но не писать перед пабликами экземпляра (tf). Фантасмогория какая-то, чесслово.
Больше запутывает, хотя выглядит конечно ритмичненько)
Я уж не опускаюсь до точки с запятой (видимо, для сеттера альфы есть свои правила) или странной инциализации только двух пресетных цветов из трех. Чисто по стилю, это импрессионизм какой-то.

Добавлено через 6 минут
Код AS3:
private var _frames4:Boolean = false;
public function set frame4(b:Boolean):void
тоже что-то не от мира сего. Удивляет, как сказал бы Боб Мартин.

Добавлено через 10 минут
А из каких соображений эти функции, типа public function setTextOverColor(color:int):void не были оформлены как сеттеры?

Добавлено через 35 минут
Сама идея про кнопку, которая рисуется ручками в ИДЕ как мувиклип, а потом надо кодом подобрать и назначить цвета текстфилду лейбла, который туда ручками же и засунут, а потом выставлен на общий доступ, типа "а теперь форматируйте меня как хотите, двигайте меня, делайте меня доступной для ввода текста" — феерично. Гибкость однозначно на высоте, в пику всему остальному. Что за гибкость, когда обработка дизабленного состояния захардкодена как изменение альфы всей кнопки? Обслуживание такой кнопки требует больше усилий и тестов "а то ли я сделал с ней?", чем написание этого кода gotoAndStop().
__________________
Reality.getBounds(this);

Старый 07.11.2013, 13:18
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 48  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Wolsh совершенно не хочется комментировать код, кроме this - это мой стиль и он останется навсегда, ритмично и это мне нравится. А не хочется потому, что я не собирался показать именно код, а показывал структуру.
Вот вам чистая структура-код, но это ничего не меняет, смысл то остается.

Код AS3:
package pro.clonez.slots 
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.text.TextField;
 
	/**
	 * ...
	 * @author in4core lab
	 */
	public class EvaluteButton extends MovieClip 
	{
		public var tf:TextField;
 
		private var _isEnabled:Boolean = true;
 
		public function EvaluteButton() 
		{
			this.mouseChildren = false;
			this.buttonMode = true;
			this.tabChildren = false;
			this.tabEnabled = false;
 
			this.addEventListener(MouseEvent.MOUSE_OVER , over );
			this.addEventListener(MouseEvent.MOUSE_OUT , out, );
			this.addEventListener(MouseEvent.CLICK , release, );
			this.addEventListener(MouseEvent.MOUSE_DOWN , down );
		}
 
		public function down(e:MouseEvent):void 
		{
			this.gotoAndStop('down');
		}
 
		public function release(e:MouseEvent):void 
		{
			if (this.hitTestPoint(stage.mouseX , stage.mouseY)) 
			{
				this.over(e);
			}
			else 
			{
				this.out(e);
			}
		}
 
		public function out(e:MouseEvent):void 
		{
			this.gotoAndStop('simple');
		}
 
		public function over(e:MouseEvent):void 
		{
			this.gotoAndStop('over');
		}
 
		public function disable():void
		{
			this.removeEventListener(MouseEvent.CLICK , release);
			this.removeEventListener(MouseEvent.MOUSE_OVER , over);
			this.removeEventListener(MouseEvent.MOUSE_OUT , out);
			this.removeEventListener(MouseEvent.MOUSE_DOWN , down);
			this.mouseEnabled = false;
			this.buttonMode = false;
			this.gotoAndStop("inactive");
			this._isEnabled = false;
			this.tf.textColor = 0x777777;
		}
 
		public function enable():void
		{
			this.addEventListener(MouseEvent.MOUSE_OVER , over );
			this.addEventListener(MouseEvent.MOUSE_OUT , out);
			this.addEventListener(MouseEvent.CLICK , release);
			this.addEventListener(MouseEvent.MOUSE_DOWN , down);
			this.mouseEnabled = true;
			this.out(null);
			this.buttonMode = true;
			this._isEnabled = true;
			this.tf.textColor = 0x0;
		}
 
		public function get isEnabled():Boolean 
		{
			return this._isEnabled;
		}
 
	}
 
}
__________________
Марк Tween

Старый 07.11.2013, 13:27
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 49  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
if (this.hitTestPoint(stage.mouseX , stage.mouseY)
Кнопка на стейдж выложена?
Я за Вас переживаю, на самом деле. Извините за строгость, если не по душе.
__________________
Reality.getBounds(this);

Старый 07.11.2013, 13:27
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 50  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Не поленился же причесать

Кстати, а hitTestPoint всегда работал с глобальными координатами? И сценарий, что при клике на кнопку её удаляют с дисплай листа тебе тоже в голову не приходил.

Но уже лучше! Поломай голову, продолжай! Эту задачу можно решить ещё меньшим количеством кода, допуская меньше ошибок.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
видимость , классы , композиция , методы , свойства

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

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


 


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


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