Запуск ActionScript 3 события с помощью кнопки

На этом занятии мы рассмотрим 2 вопроса:

  1. Запуск ActionScript 3 события с помощью кнопки
  2. Дополнительная информация

Обработчик ActionScript 3 события описывает действия, которые будут происходить после того как событие случится, но, как и обычная функция, он должен быть вызван. Для вызова обработчика служит слушатель события (event listener). Он позволяет назначить объект и событие, вызывающее обработчик.

Обработчик закрепляется за объектом с помощью метода addEventListener, который принимает два аргумента:

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

Для назначения ActionScript 3 события объекту можно использовать суперкласс Event, описывающий все возможные события встроенные в ActionScript 3. Однако, гораздо лучше использовать подкласс, определяющий более узкую группу событий, например MouseEvent. Большинство из этих подклассов содержат постоянные (const) для частоиспользуемых событий, например MouseEvent.CLICK – вызывает обработчик после того как пользователь щелкнет кнопкой мыши. Также и подкласс KeyboardEvent содержит постоянные для большинства клавиш на клавиатуре, чтобы они при нажатии реагировали соответственно.

Вторым аргументом в слушателе события всегда стоит имя обработчика. Несмотря на то, что обработчик это функция Вам не нужно использовать круглые скобки, которые обычно ставятся после имени функции, т.к. Вы не можете передавать ей какие-либо аргументы. Вот пример записи слушателя события, «привязанного» к кнопке с именем btnAbout и обработчиком, который обеспечивает переход к нужной веб-странице после нажатия этой кнопки:

После того как слушатель ActionScript 3 события был добавлен к объекту и записан обработчик события, объект находится в состояния ожидания этого события. Когда же оно происходит объект вызывает обработчик, который производит все необходимые действия.

Вызов/запуск события с помощью кнопки

Создайте кнопку на сцене.

кнопка actionscript

Дайте имя экземпляру этой кнопки в панели Свойства (см. урок «Создание экземпляра (Instance). Присвоение имени экземляру»).

Properties panel

Откройте панель Actions (см. урок «Использование панели Actions»).

Создайте обработчик события (см. урок «Создание обработчика события ActionScript»).

После закрывающей фигурной скобки функции-обработчика события запишите имя экземпляра кнопки и поставьте точку.

Введите

Внутри круглых скобок наберите

Далее введите имя обработчика ActionScript 3 события, созданное ранее.

ActionScript 3 событие

Нажмите Ctrl + Enter. Flash Player начнет воспроизводить ролик.

Кликните на кнопке.

Событие запустится и код, записанный в обработчике начнет работать.

В окне Output появится запись, сделанная с помощью метода trace.

Панель Output

Дополнительная информация

Если у Вас кнопка находится внутри MovieClip, то пользователь будет щелкать на двух объектах одновременно! В большинстве случаев Вы будете добавлять слушатель ActionScript 3 события именно к кнопке, а так как у MovieClip не будет слушателя события, то он будет просто игнорировать эти щелчки. Однако, Вы можете закрепить слушатель события за MovieClip тоже. Если обработчик будет тот же, то он сработает два раза: один раз, вызванный кнопкой, второй раз MovieClip. Если же Вы используете другой обработчик для MovieClip, то сработают два разных обработчика: сначала кнопка, затем MoviClip.

Теоритечески, Вы можете помещать неограниченное количество MovieClip друг в друга, а затем присваивать каждому из них разные обработчики, а назначать одно и тоже событие. Все они сработают в нужный момент в последовательности от самого низкого уровня вложения к самому высокому, который можно назвать родительским. Этот процесс известен в ActionScript 3 как “event bubbling” (по аналогии с поведением воздушного пузыря в воде). Т.е. ActionScript 3 событие поднимается от объекта к объекту, каждый из которых может вызывать обработчик если это небходимо.

Запуск ActionScript 3 события с помощью кнопки: 7 комментариев

  1. Все сделал по инструкции. Но прога кнопку не видит: “Обращение несуществующего свойства btn1”.

  2. В фигурных скобках я поместил код, при нажатии на кнопку выводится динамический текст. А как сделать, чтобы при нажатии на ту же или другую кнопку, этот текст исчезал?

    1. Михаил, используйте для этого свойство visible. Например, btn2.addEventListener(MouseEvent.CLICK,btn2Clicked); function btn2Clicked(e:MouseEvent):void{myText.visible=false}. btn2 — это Ваша вторая кнопка, а myText — имя экземпляра MovieClip или Sprite, в который помещен Ваш динамический текст.

      1. Уважаемый Валерий, большое спасибо за быстрый ответ, что не остались равнодушны к моему вопросу. Я уже около месяца штудирую Ваши уроки, начало доходить! Понял суть – так как доступно рассказано и разжевано. Знаний в ActionScript у меня ещё не очень много, но безумно тянет что-то сделать. Расскажу подробнее о своей задумке. Есть, скажем, в приложении десять кнопок. Я хочу, чтобы при нажатии на кнопку1, в определенной области (в правом нижнем углу) выводилось слово “Яблоко”, при нажатии на кнопку2 – слово “Груша”, при нажатии на кнопку3 слово “Персик” и т.д. Все это я сделал, добавил звук при наведении курсора на кнопку. Но нажимаю на “Яблоко” – текст в нужной зоне появляется, нажимаю “Груша” – текст накладывается на “Яблоко”, нажимаю “Персик”, он накладывается на первых два. А мне нужно, чтобы при нажатии на кнопку “Груша”, “Яблоко” стиралось, и оставалось только “Груша”, чтобы текст не накладывался друг на друга. Вот это пока не могу решить. Вот кусок кода: import flash.events.MouseEvent; function Yabloko (e:MouseEvent):void { import flash.text.TextField; var txtYabloko:TextField = new TextField (); addChild (txtYabloko); txtYabloko.text =(“Яблоко”); txtYabloko.x = 275; txtYabloko.y = 350; txtYabloko.width = 500; txtYabloko.height = 20; } btnYabloko.addEventListener(MouseEvent.CLICK, Yabloko); function Grusa (e:MouseEvent):void { import flash.text.TextField; var txtGrusa:TextField = new TextField (); addChild (txtGrusa); txtGrusa.text =(“Груша”); txtGrusa.x = 275; txtGrusa.y = 350; txtGrusa.width = 500; txtGrusa.height = 20; } btnGrusa.addEventListener(MouseEvent.CLICK, Grusa);

        1. Валерий, большое спасибо за то, что помогли решить вопрос, который мне не давал покоя. Казалось бы все просто, я и чувствовал, что решение где-то рядом, но ещё в своем обучении не дошел до этого.

  3. Нашел ошибку : в конце первого абзаца в дополнительной информации написано MoviClip а не MovieClip

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *