![]() |
Пользовательское событие
Никак не могу разобраться с пользовательскими событиями. Вроде пишу что-то, но не работает.
Поэтому, уважаемые форумчане, скиньте пожалуйста полный код какого-нить своего простого пользовательского события, чтобы я его разжувал и наконец таки все понял. А то по примерам, которые у меня есть, мне мало что понятно. Или же объясните простым языком, что да как. Заранее благодарен. |
А может для начала вы скажете что именно не получается, и свой код скинете, а мы уж коллективным разумом ошибки поищем?;)
Здается мне, так эффективнее получится) |
Само событие, расширяющее стандартный event 2 параметрами - x и y(по типу как mouse event);
Код AS3:
Код AS3:
Код AS3:
|
эм... а зачем у вас в событии сеттеры?
|
Цитата:
Но хочу обратить ваше внимание на то, что во flash нет ни одного события с открытыми членами, все реализовано через свойства... Подозреваю, что так обстоит дело не только с событиями, а и со всеми стандартными классами flash. Константы, естественно, не в счет... Добавлено через 3 минуты Там в примере еще атрибутов по хорошему не хватает, вроде такого: Код AS3:
|
Цитата:
Использовать сеттеры в событиях это мягко скажем моветон. Ваше же объяснение совсем не по теме вышло. |
в чем моветон то?
ну сеттер и сеттер... хочешь 1 раз при создании передать в него что-то - передай всего 1 раз. благо if никто не отменял) Добавлено через 8 минут п.с. я, просто, вообще не сторонник "много параметров в конструктор". в отношении Ивентов - больше одного кастомного параметра для ивента - моветон (ИМХО). в данном случае х,у легко заменяется одним поинтом. |
Ну вот событие, которое у меня посылается при взлете вертолета в игре:
Код AS3:
|
Цитата:
Но это вовсе не значит, что в событиях не нужны сеттеры, просто они не нужны конкретно здесь... К примеру взгляните на тот же MouseEvent, и вы найдете там сеттеры, и не случайно;) Впрочем когда я писал код примера, я как то об этом не задумывался, нужны там сеттеры или нет...:) На вопрос, как сделать пользовательские события, такие тонкости, как наличие сеттеров... врятли имеет какое то значение.... |
goodguyабсолютно не понял, в чем "кастомность" Вашего события, в каком месте оно "расширяет" обычное Событие и, в частности, чем отличается метод clone в Вашем событии от исходного, что его пришлось оверрайдить. Не логичнее было бы создать класс ВертолётИвэнт, а в нем уже разные ТИПЫ этого события - ап, даун, дестрой и т.п.? Даже в этом ключе в нем нет особой необходимости - можно создать класс-список констант типа HELICOPTER_UP, HELICOPTER_DOWN, HELICOPTER_DESTROYED и диспатчить обычные экземпляры Event с нужным Типом из этого списка. Нет смысла множить сущности.
Кастомные классы событий нужны, когда Вы хотите передавать в событиях дополнительные параметры. По поводу количества параметров - можно иногда отказаться от передачи типа в конструктор кастомного события, если тип в реальности один. Например Код AS3:
Код AS3:
|
Благодарю всех за ответы и комменты. Начало доходить. Будут еще вопросы - буду сюда обращаться.
У меня есть вопрос:где можно найти открытый код всех классов AS3? |
DZHETIGAPA, одна тема - один вопрос. Относитесь к Теме не как к посиделкам за чаем, а как к разделу в Справочнике. Удачи.
|
Вот в конкретном примере возникли проблемы с событием.
Есть два класса. В первом классе Menu3D располагается скроллер, менюшки, контент. А второй класс ScrollerClass и есть СКРОЛЛЕР. Мне нужно, чтобы при нажатии на контент(в классе Menu3D) в классе ScrollClass вызвалось это событие. Вот мои действия. Код AS3:
Код AS3:
|
clickContent - сюда трейс вставь и погляди, а то судя по коду должно работать.
Возможно событие клика не происходит, тогда уж надо смотреть как подписался на клик. |
Событие клика работает как надо. Еще один нюанс, про который не сказал. ScrollClass изначально помещен в класс-библиотеку Lib. Там ему задается статическая публичная переменная. Через эту переменную я и переношу скролл в класс Menu3D.
Код AS3:
Код AS3:
Добавлено через 6 минут Заменил статические переменные просто публичными - ничего не изменилось. Событие клика работает, но мое событие нет. |
А мне вот странно, почему не придрались к этой строке:
Код AS3:
@Wolsh: Цитата:
Цитата:
Поэтому я ратую "за" при создании подобных эвентов. Даже те, которые в данный момент ничего не переносят. Но конкретно в этом случае я вообще ратую за использование Event со стандартными константами Event. Абстракция, друзья мои. Типа Код AS3:
|
Цитата:
Цитата:
Цитата:
Добавлено через 10 часов 42 минуты Сам язык подсказывает, что "логично" а что нет. MouseEventRollOut.ROLL_OUT выглядит совершенно нелогично. Любое событие с единственным типом содержит в себе какое-то несовершенство. Хотя конечно возможны исключения. Язык подсказывает - есть объект-источник событий. Есть событие, источником которого является объект. Иногда объект генерит разные типы событий. Но Лётчик генерит СобытиеЛётчика, а не СобытиеОфициантки. Любое событие "от лётчика" - это СобытиеЛётчика. Оно может быть разных типов - СобытиеЛётчика.Я_УСНУЛ, СобытиеЛётчика.Я_НАЖРАЛСЯ. Но это событие - Лётчика, вы можете передавать в нем показания приборов или температуру тела на момент события. Официантка тоже может уснуть, но в ее событии, подозреваю, будут совсем другие параметры. Подход, о котором вы говорите - создавать КЛАСС на каждый ТИП события, т.е. СобытиеЛетчикНажрался.ЛЁТЧИК_НАЖРАЛСЯ, СобытиеЛётчикУснул.ЛЁТЧИК_УСНУЛ. По-моему, эти "синтаксисы" говорят сами за себя. Нет такого объекта "летчик нажрался", который является источником события "ЛЁТЧИК_НАЖРАЛСЯ". Это УЖЕ и есть событие. Событие, источником которого является Летчик. |
| Часовой пояс GMT +4, время: 15:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.