Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как восстановить цепочку диспетчеризации событий? (http://www.flasher.ru/forum/showthread.php?t=174029)

Korchy 16.01.2012 17:40

Как восстановить цепочку диспетчеризации событий?
 
У меня такая ситуация: Сцена, на ней по орбитам движутся планеты. По клику на каждой планете рядом с ней создается контейнер с кнопками - возможные действия на этой планете. Контейнер следует за планетой. Чтобы контейнер с кнопками был всегда сверху и не перекрывался другими планетами, он чайлдится не к своей планете а к сцене на верхний уровень. Соответственно, когда происходит клик по кнопке, цепочка диспетчеризации оказывается "разорвана" т.е. событие клика в фазе захвата/всплытия отрабатывается: сцена - контейнер - кнопка - контейнер - сцена. Планета оказывается выкинутой из цепочки. А мне бы хотелось иметь ее на фазе захвата, чтобы помечать ее как текущую и легко получать ее id, а не через навороченную цепочку parent.leader.parent... (leader это указатель на планету, чтобы иметь возможность перемещать кнопки следом за ней). На ум приходит слушать событие в контейнере и диспатчить его планете, но тогда планета получит событие в фазе TARGET, а мне это не нужно, мне нужно отработать клик на ней в фазе захвата. Можно что-то придумать в данной ситуации или к планете можно добраться только через прямую цепочку указателей?

wvxvw 16.01.2012 18:23

А почему нельзя держать Dictionary со ссылками на планеты / контейнеры?

GBee 16.01.2012 18:38

А как контейнер движется за планетой? У него есть ссылка на нее?

Korchy 16.01.2012 18:39

Цитата:

Сообщение от wvxvw (Сообщение 1057266)
А почему нельзя держать Dictionary со ссылками на планеты / контейнеры?

Ну, у меня не Dictionary а самопальные списки объектов. Как мне Dictonary поможет?

Добавлено через 38 секунд
Цитата:

Сообщение от GBee (Сообщение 1057270)
А как контейнер движется за планетой? У него есть ссылка на нее?

Да. leader

Vektor 16.01.2012 18:44

Цитата:

чтобы контейнер с кнопками был всегда сверху и не перекрывался другими планетами, он чайлдится не к своей планете а к сцене на верхний уровень.
Это, не совсем правильно, клип с кнопками должен оставаться на том уровне, где и планеты, просто надо его поместить выше других объектов, хотя при добавлении клипа на отображение он автоматически переходит на самый верхний уровень.
Эта функция помещает, контейнер с кнопками, на самый верх, контейнера с планетами.
Код AS3:

контейнер с планетами.setChildIndex(контейнер с кнопками,контейнер с планетами.numChildren-1);


Korchy 16.01.2012 18:55

Цитата:

Сообщение от Vektor (Сообщение 1057273)
Это, не совсем правильно, клип с кнопками должен оставаться на том уровне, где и планеты, просто надо его поместить выше других объектов, хотя при добавлении клипа на отображение он автоматически переходит на самый верхний уровень.
Эта функция помещает, контейнер с кнопками, на самый верх, контейнера с планетами.
Код AS3:

контейнер с планетами.setChildIndex(контейнер с кнопками,контейнер с планетами.numChildren-1);


Если контейнер чайлдится к планете, он не может быть выше других планет, если только сама планета не верхняя в списке. Можно конечно при присоединении контейнера кидать планету на верх списка, но как тогда быть, если контейнеры открыты у двух планет одновременно? Тогда одна планета все равно наползет на контейнер другой.

artcraft 16.01.2012 19:08

Цитата:

Сообщение от Korchy (Сообщение 1057271)
Цитата:

А как контейнер движется за планетой? У него есть ссылка на нее?
Да. leader

что мешает тогда слушать события кнопок конетйнеру и просто вызвать метод планеты напрямую?

GBee 16.01.2012 19:11

Цитата:

что мешает тогда просто вызвать метод планеты напрямую?
Да, по-моему, профит тут, я спецом и спрашивал.

Vektor 16.01.2012 19:32

Я не внимательно прочитал, вопрос, поэтому некорректный дал ответ.
Я имел ввиду, к планете, а не в клип с планетой, как у вас и сделано.
Сори.

Korchy 16.01.2012 23:20

Цитата:

Сообщение от artcraft (Сообщение 1057281)
что мешает тогда слушать события кнопок конетйнеру и просто вызвать метод планеты напрямую?

Цитата:

Сообщение от GBee (Сообщение 1057282)
Да, по-моему, профит тут, я спецом и спрашивал.

Я так и делаю. Но вот так например выглядит обращение к планете от одной из кнопок интерфейсного окна:

Код AS3:

private function GetPlanetId():uint {
        return PlanetButtons(IndustryWindow(parent.parent.parent).Leader.parent).Leader.Id;
}

что по-моему не есть гут. Чайлд не должен в жесткую знать такую длинную линейку своих парентов.


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

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