
Код AS3:
package {
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author gloomyBrain
*/
public class Main extends Sprite {
public var s0:Sprite;
public var s1:Sprite;
public var s2:Sprite
public function Main():void {
s0 = new Sprite();
s1 = new Sprite();
s2 = new Sprite();
s0.addEventListener("someEvent", onEvent);
addChild(s0);
s0.addChild(s1);
s1.addChild(s2);
s2.dispatchEvent(new Event("someEvent", true));
}
public function onEvent(evt:Event):void {
trace("got you!");
}
}
}
В данном примере слушатель регистрируется в объекте s0, а событие возникает объекте s2. Событие ловится, т.к. свойство события bubbles = true. Это заставляет событие проходить по всей иерархии отображения.
Таким образом, Вы можете диспатчить события любым объектом, а решения принимать в классе схемы (родительском объекте)
Собственно, пример к тому что написал Samfr
UPD:
Я бы делел так?
1 - класс ОбъектСхемы
2 - класс СвязьДвухОбъектов
1 - должен иметь поля:
- тип
- размер
- координаты
- связи (массив ссылок на объекты класса связьДвухОбъектов)
- ... что-то еще по заданию
1 - должен диспатчить события:
- при перемещении
- при удалении
- при изменении других свойств
1 - должен слушать свои события:
- перемещения (и вызывать метод перерисовать() для всех своих связей)
- удаления (и освобождать все вои связи от ссылки на себя)
2 - должен иметь поля:
- тип
- цвет
- координаты одного конца |=> для создания связей без привязки к объектам
- координаты второго конца|
- первый объект (ссылка на объект класса ОбъектСхемы)
- второй объект (ссылка на объект класса ОбъектСхемы)
- ... еще что-то по заданию
2 - должен иметь методы:
- перерисовать() - метод, рисующий связь заново при изменении положения ОбъектовСхемы, ссылки на которые записаны в первомОбъекте и второмОбъекте данной связи
- ... еще что-то по заданию