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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.03.2008, 18:32
Nemo_c вне форума Посмотреть профиль Отправить личное сообщение для Nemo_c Найти все сообщения от Nemo_c
  № 11  
Ответить с цитированием
Nemo_c
 
Аватар для Nemo_c

Регистрация: Jan 2008
Сообщений: 221
Спасибо всем за советы!
Резюмирую.
заданный Вопрос, благодаря помощи экспертов, решился следующим образом
1. Параметры кнопки по умолчанию выносим в отдельный класс
Код:
package
{
	public class BtnParams
	{   public var colorUpState:uint = 0xff0000;
		public var colorOverState:uint = 0x00ff00;
		public var colorDownState:uint = 0x0000ff;
		public var edgeSize:Number = 20;
		public var angleRotation:Number = 30;
		
		public function BtnParams()
		{
		}

	}
}
2. Класс описания кнопки изменился следующим образом
Код:
package
{   import flash.display.*;
	public class TriangleButton extends SimpleButton
	{
		public function TriangleButton(params:BtnParams)
		{
	    upState      = new Triangle(params.colorUpState, params.edgeSize, params.angleRotation);
            overState    = new Triangle(params.colorOverState, params.edgeSize, params.angleRotation);
            downState    = new Triangle(params.colorDownState, params.edgeSize, params.angleRotation);
            hitTestState = upState;
		}

	}
}
3. Класс в котором мы кнопку создаём и вызываем теперь выглядит так

Код:
package
{   import flash.display.Sprite; 
	public class UsingBtn extends Sprite
	{
		public function UsingBtn()
		{
			
			var btnParams:BtnParams = new BtnParams();
			btnParams.colorDownState=0xffffff; // меняешь что надо
			var btn:TriangleButton = new TriangleButton(btnParams);
			btn.x = 100;
			btn.y = 100;
			btnParams.edgeSize = 60;
			var btn1: TriangleButton = new TriangleButton(btnParams); 
			btn1.x = 200;
			btn1.y = 200;
			addChild(btn);
			addChild(btn1);
			
		}

	}
}
ещё раз всем спасибо!!! за науку всё скомпилировалось и работает
отдельное спасибо Dima_DPE


Последний раз редактировалось Nemo_c; 21.03.2008 в 18:43.
Старый 21.03.2008, 18:54
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 12  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Есть еще один не упомянутый, но часто используемый способ, с моей точки зрения, часто более предпочтительный. Если вы посмотрите на флексовые классы компонентов, то увидите, что там у констукторов практически не бывает аргументов.
Это хоть и спорная, ну или не обязательная практика, но лично мне она нравится. Разделяется процедура создания экземпляра класса как такового и инициализация его свойств.
В этом есть ряд преимуществ, которые сказываются прежде всего в больших проектах.

Собственно применительно к текущему вопросу, то сносим аргументы из конструктора TriangleButton и создаем одноименные get-set свойства, которые позднее задаем.
Кстати, ничто не мешает в TriangleButton создать get-set свойство типа BtnParams и аналогично его использовать.
Единственно, я бы назвал его не BtnParams а ButtonStyle.
__________________
http://realaxy.com

Старый 21.03.2008, 19:05
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 13  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
По поводу пустых конструкторов согласен, но инициализировать объект в несколько строчек не всегда красиво, особенно если он очень простой.

Я бы в данном случае завел доп. статический метод(ы), возвращающий экземпляр класса, что-нибудь типа createInstanceByXXX. А в нем прописать у создаваемого объекта инициализацию дальнего параметра.

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

Регистрация: Jan 2008
Сообщений: 221
Можно ещё в конструкторе загружать XML с параметрами и его парсить :-)
to Iv
Цитата:
В этом есть ряд преимуществ, которые сказываются прежде всего в больших проектах.
каких именно приемуществ и в чём они выражаются?Это кажется Гради Бутчем попахивает :-)

to badun
Цитата:
Я бы в данном случае завел доп. статический метод(ы), возвращающий экземпляр класса,
а можно пример кода, желательно модифицировать мой, ну или ссылку на то где про даный приём прочитать можно, или хотя бы как он называется?

Старый 21.03.2008, 19:53
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 15  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
Цитата:
Сообщение от Nemo_c
to badun
а можно пример кода, желательно модифицировать мой, ну или ссылку на то где про даный приём прочитать можно, или хотя бы как он называется?
Примерно так.
Код:
public static function createInstanceByRotation(angleRotation:Number):TriangleButton  {
	return new TriangleButton(0xff0000, 0x00ff00, 0x0000ff, 20, angleRotation);
}
Но лучше так не делай )), плохо исходник просмотрел. Здесь как уже сказано было выше нужно сеттеры/геттеры поставить.

Старый 21.03.2008, 20:44
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 16  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Когда проект большой, вполне возможна ситуация, при которой экземпляр класса должен быть, но параметры передать ну никак не можем или это крайне неудобно. Часто встречается, когда объект желательно иметь статической константой.

С Гради не бухал, просто делаю выводы из чужого опыта.

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

Еще вариант - если у тебя несколько типов кнопок, то попросту создать подклассы.

Крайне сложно сказать какой вариант использовать предпочтительнее. Это твой проект и твой выбор. Но варианты знать желательно, чтобы этот самый выбор расширить.
__________________
http://realaxy.com

Старый 21.03.2008, 20:47
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 17  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Код:
public function get style ():ButtonStyle {
    return new ButtonStyle(color, alpha);
}
public function set style (value:ButtonStyle):void {
    color = value.color;
    alpha = value.alpha;
    redraw();
}
- ну вот типа того.
__________________
http://realaxy.com

Старый 21.03.2008, 21:04
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 18  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Можно просто объектом:
Код:
package
{   import flash.display.*;
	public class TriangleButton extends SimpleButton
	{
	   public function TriangleButton(params:Object)
	  {
            upState      = new Triangle((params.colorUpState || значение1), ( params.edgeSize || значение2), (params.angleRotation  || значение3));
            hitTestState = upState;
	  }

	}
}
А вызывать так:
Код:
var btn = new TriangleButton({colorUpState: значение1, colorOverState: значение2, ...});


Последний раз редактировалось Rzer; 21.03.2008 в 21:08.
Старый 21.03.2008, 21:18
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 19  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Нельзя просто объектами. Это нетипизированный доступ. Это уродство.
Если передается объект данных, то его нужно обязательно типизировать.
__________________
http://realaxy.com

Старый 21.03.2008, 23:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 20  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Iv
нужно обязательно типизировать.
Вместо «обязательно» нужно «желательно».

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

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

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


 


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


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