![]() |
Не диспачится событие
Пока окончательно события понять не могу. Как я понял, они диспачатся и передаются вверх. Я создаю класс Region и в нем диспатчу событие. Во CS3 создаю различные фигурки и делаю им расширение классом Region. Мне нужно, чтобы в основном классе вызвалось продиспатченное событие в классе Region.
Код AS3:
|
Вы путаете отношения наследования с деревом дисплей-листа.
|
А объяснить сможете, пожалуйста. Как работает событие и в чем тут ошибка?
Добавлено через 27 минут Как мне в таком случае вызвать событие, продиспатченное в Region? |
У Вас событие наверх диспатчится по клику мыша. Нет события клика мыша внутри региона.
|
Почему это нет события? Вот событие клика внутри Региона
Код AS3:
|
поставьте трейс сразу после e.target.alpha = 0.5;
обработчик события есть, просто оно не возникает Вот рабочий код, если не ждать события MouseEvent.CLICK: Код AS3:
|
Цитата:
Цитата:
Ты меня немного не так понял, наверное. Как работает событие я знаю, но вот с пользовательскими событиями - еще путаюсь. Так как грамотно организовать код? |
Если поставить трейс внутрь Region.onclick(), станет очевидно, что Region.onclick() не отрабатывает. Будет отрабатывать, будет и событие диспатчиться.
|
Честно говоря, я так и не понял, о чем вы. Мне нужно вызвать событие в главном классе, продиспатченное в Регионе. Как это сделать? Вот вопрос!
Уважаемый форумчане, кто может ответить на данный вопрос? |
mikhailk, я так и не понял почему не должен сработать онКлик в риджионе, если он наследник мувика и есть некая кликабельная область (если есть конечно).
|
все очень просто.
у автора стоит абсолютно рабочий код dispatchEvent(new Event(Region.CLICK_REG1)), который почему-то не работает. что делает разумный человек? наверное, он проверяет, а приходит ли управление в это место кода - в данном случае, отрабатывает ли метод onClick в классе Region. как он это делает? например, он ставит трейс перед фрагментом кода, который не отрабатывает (что я, собственно, и предложил автору) почему я считаю, что код рабочий? потому что я взял код автора, переименовал метод с неработающим dispatchEvent(new Event(Region.CLICK_REG1)), вызвал его напрямую и все отработало (см. приведенный фрагмент кода) |
Метод onclick в Регионе срабатывает. В этом проблем нет. Но не вызывается в главном классе.
Я еще раз все переписал и откомпилил. |
Код AS3:
|
Тут проблема в следующем. У тебя главный класс создает экземпляр класса Region. В главном классе ты вешаешь обработчик события. Но ты ведь на сцену не добавляешь Region объект. А в Region ты написал, что как только ПО НЕМУ кликнуть, то диспатчится событие. А как же ты по нему кликнешь, если его нету на сцене? ))) раз его нету на сцене, то кликнуть по нему ты не можешь и поэтому продиспатчить событие ты тоже не можешь. Тебе надо либо добавлять его на сцену в главном классе. Либо диспатчить не по клику, а в конструкторе, например.
|
Если диспатчить в конструкторе, то никогда не получится подписаться на событие до его диспетчеризации.
В конструкторе диспатчить события нельзя! |
можно :)
если слушать не на объекте, а на его родителе и баблинг поставить но не нужно |
Даже если слушатель на родителе - родитель возникает в момент addChild, что позже конструктора полюбому)
|
да, действительно ))
Нет, все-таки можно. Надо событие отправить на статическую переменную Main.instance (как пример) и ее же слушать. |
Давайте закончим с бредом.
Цитата:
правило: В конструкторе диспатчить события нельзя! |
Цитата:
|
Цитата:
Но вы меня не слушайте, Котяра верно говорит ) |
Никто не спорит насчет того, допустимо или нет диспатчить событие из конструктора. Нет, естественно.
Но на вопрос, существует ли вообще техническая возможность отправить событие из конструктора, ответ утвердительный. AS3 позволяет отправить событие из ЛЮБОЙ функции. А так да, обсуждать нечего. |
| Часовой пояс GMT +4, время: 09:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.