![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 4
|
Имеется Class1 и его наследник Class2.
Оба эти класса могут быть добавлены в список отображения в любой последовательности, любом количестве и любой степени вложенности из этих двух классов. Class2 слушает событие мыши (свое или детей) и принимает определенный статус. Поскольку Class2 не знает какие у него дети (и дети детей) - все Class2 слушают событие мыши. Задача: добиться того, чтобы первый попавшийся родитель Class2 (или сам Class2, если он был целью события) отработал метод (получал статус). А все следующие за ним выше - проигнорировали. При чем иметь статус одновременно может только один экземпляр Class2. - останавливать эвент нельзя. - подгонять Class1 под нужды Class2 нельзя. Не хочется городить в предке код, который ему не нужен. - полностью заявить о полученном статусе ближайший Class2 может только в обработчике события. Никаких setinterval, timer, enterFrame etc У меня есть несколько "костыльных" вариантов вроде: ближайший Class2 загоняет в internal переменную Class2.gotStatus = true, потом он и все последующие смотрят своих родителей, и если среди них больше нет экземпляра Class2 - устанавливают Class2.gotStatus = false. Но, думается, есть разумный и простой вариант, которого я пока не вижу. |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 4
|
тогда уж
дешевле на геттер. Но не подходит. Экземпляры Class1 также могут быть целью события, а получить статус должен экземпляр Class2, стоящий выше (если он, конечно, вообще есть). |
|
|||||
|
>>Экземпляры Class1 также могут быть целью события, а получить статус должен экземпляр Class2
тогда остается только 'вручную всплыть' до ближайшего Class2 |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 4
|
честно говоря, не понял для чего идет эта проверка.
Но не суть. Видимо, предполагается прописать в Class1 (предке) ручное "всплытие" до Class2 (наследника). А это уже: Цитата:
Ключевая проблема: как-то "очевидно" заставить все, оставшиеся в цепи родителей, экземпляры Class2 не реагировать на всплывающий мышиный эвент (который уже отработал на нижестоящем Class2) Последний раз редактировалось iaf; 27.08.2014 в 01:21. |
|
|||||
|
не, все происходит в обработчике Class2
эта та же самая проверка, только вместо e.target (которым может быть Class1, например, или вообще Sprite) смотрим вверх по дисплейЛисту до первого Class2 , если он и есть подписант, то ему и карты в руки, а остальные получатели события не у дел |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 319
|
я думаю нужно подписаться у всех Class2 на фазу захвата, последний кто принял это событие на фазе захвата будет первым кто получит событие на целевой фазе из всех Class2 и Class1 и дальше от этого прыгать. фаза захвата обратная фазе всплытия и отрабатывается первой
|
|
|||||
|
Регистрация: Mar 2014
Сообщений: 4
|
Хорошая мысль. Однако используется сторонний фреймворк, у которого фазы захвата нет.
В сущности да - вариант. Пока на нем и остановлюсь, если не будет еще идей. Спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|