Но судя из моего поста можно подумать, что я все действия делаю в Main. Нет, это не так.
Я привёл реализацию панели в Main только для примера. В этом плане слушайте Wolsh
Цитата:
Если у Вас Мейн должен знать все о какой-то тридевятой кнопке в тридесятом контейнере, значит Вы не разделили ответственность по объектам и Мейн перегружен. Ему нужны министры, а министрам — менеджеры, организовывающие персонал. Создавайте цепочки иерархии, компануйте однотипные задачи, не валите все в одну кучу Мейн.
|
Например, если мы пишем фотошоп, и нам нужна перетаскиваемая панель инструментов с кнопками и крестиком для закрытия, айда делаем вот так

Код AS3:
package
{
import flash.display.Sprite;
/**
* ...
* @author ZackMercury
*/
public class InstrumentsPanel extends Sprite
{
private var _panel:Panel;
public function IntrumentsPanel()
{
_panel = new Panel();
_panel.addButton(..., buttonClicked);
//Создаём задний фон панели для перетаскивания при зажатии на нём мыши и крестик для закрытия, опущу этот момент, ибо тут всё элементарно.
...
addChild(_panel);
}
private function buttonClicked(e:MouseEvent):void
{
switch((e.target as Button).caption)
{
case "...":
//todo, здесь выбираем текущий инструмент и записываем в публичное свойство, чтобы область рисования выбирала его
break;
case "...":
//todo
break;
default:
throw new Error("No action for this button");
}
}
}
}
Данный приём называется "композиция", и описан в первых главах книги Колина Мука.