|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: 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() { } } } 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; } } } 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. |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Есть еще один не упомянутый, но часто используемый способ, с моей точки зрения, часто более предпочтительный. Если вы посмотрите на флексовые классы компонентов, то увидите, что там у констукторов практически не бывает аргументов.
Это хоть и спорная, ну или не обязательная практика, но лично мне она нравится. Разделяется процедура создания экземпляра класса как такового и инициализация его свойств. В этом есть ряд преимуществ, которые сказываются прежде всего в больших проектах. Собственно применительно к текущему вопросу, то сносим аргументы из конструктора TriangleButton и создаем одноименные get-set свойства, которые позднее задаем. Кстати, ничто не мешает в TriangleButton создать get-set свойство типа BtnParams и аналогично его использовать. Единственно, я бы назвал его не BtnParams а ButtonStyle.
__________________
http://realaxy.com |
|
|||||
Регистрация: Dec 2007
Сообщений: 269
|
По поводу пустых конструкторов согласен, но инициализировать объект в несколько строчек не всегда красиво, особенно если он очень простой.
Я бы в данном случае завел доп. статический метод(ы), возвращающий экземпляр класса, что-нибудь типа createInstanceByXXX. А в нем прописать у создаваемого объекта инициализацию дальнего параметра. |
|
|||||
Регистрация: Jan 2008
Сообщений: 221
|
Можно ещё в конструкторе загружать XML с параметрами и его парсить :-)
to Iv Цитата:
to badun Цитата:
|
|
|||||
Регистрация: Dec 2007
Сообщений: 269
|
Цитата:
Но лучше так не делай )), плохо исходник просмотрел. Здесь как уже сказано было выше нужно сеттеры/геттеры поставить. |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Когда проект большой, вполне возможна ситуация, при которой экземпляр класса должен быть, но параметры передать ну никак не можем или это крайне неудобно. Часто встречается, когда объект желательно иметь статической константой.
С Гради не бухал, просто делаю выводы из чужого опыта. И да, я же говорил, что можно сделать get-set метод, который оптом задает все параметры отрисовки, присваивая ему объект данных. Еще вариант - если у тебя несколько типов кнопок, то попросту создать подклассы. Крайне сложно сказать какой вариант использовать предпочтительнее. Это твой проект и твой выбор. Но варианты знать желательно, чтобы этот самый выбор расширить.
__________________
http://realaxy.com |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
- ну вот типа того.
__________________
http://realaxy.com |
|
|||||
Можно просто объектом:
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; } } } Последний раз редактировалось Rzer; 21.03.2008 в 21:08. |
|
|||||
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Нельзя просто объектами. Это нетипизированный доступ. Это уродство.
Если передается объект данных, то его нужно обязательно типизировать.
__________________
http://realaxy.com |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Цитата:
|
Часовой пояс GMT +4, время: 02:03. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|