диспетчеризация с объекта, которого нет в списке отображения? - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть объект, который управляет другим объектом, который находится в списке отображения.

Настройка выглядит так:

Parent (Main Timeline)
- Child 
-- Grandchild --> contains instance of behaviour class that controls the grandchild's movement

У меня есть событие в «поведении», котороеХотелось бы связаться с родителем, но поведение не распространяется на Sprite или MovieClip.

Как я могу получить это событие, чтобы добраться до родителя?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Есть два пути. Если объект «поведения» имеет доступ к GrandChild, GrandChild имеет корневое свойство (которое, удобно) является корневым - это будет работать только при наличии пути к корню. Вы не можете удалить ребенка (или его родителей), а затем ожидать непосредственного доступа к корню. Но если у вас есть объект DisplayObject, о котором вы знаете , вы можете использовать его для прямой связи с корнем. (Вы также можете при правильном кастинге получить доступ ко всем родителям, бабушкам и дедушкам внука).

Вы также можете иметь централизованный EventDispatcher, который прослушивается всем, что вы хотите слушать. По сути, создайте Singleton (вам нужно будет это найти для AS3), который подклассов EventDispatcher, и затем скажите ему, что нужно отправлять любые события, которые вам нужны.

Это будет выглядеть примерно так:

//on the root
EventDispatcher.getInstance().addEventListener( "myCustomEvent", myEventhandler );

//in behavior
EventDispatcher.getInstance().dispatchEvent( new Event( "myCustomEvent" ) );

//root now acts accordingly.
1 голос
/ 24 февраля 2011

Класс "BubblingEventDispatcher", на который вы ссылаетесь, немного вводит в заблуждение. На самом деле это просто добавление дочерних элементов в список отображения, чтобы включить всплывание:

AS3 Событие пузыряется за пределами Scenegraph / DisplayList

Чтобы ретранслировать события, не имея доступа к пузырькам, вы в основном застреваете, слушая события на каждом уровне и передавая их вручную. Он выполняет то же самое, что и если бы вы запустили событие, но это больше хлопот, а также вводит более тесную связь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...