Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 2:

Применение обработчиков событий

  1. Вернитесь на основной монтажный стол. В слое Lights нажмите значок Показать слой (Show Layer – красный X). Обнаружится большой черный прямоугольник, закрывающий всю сцену. Двойным щелчком на нем откройте фильм-символ для редактирования на месте.

Имя экземпляра этого фильма-символа – lights. Его монтажный стол, как видите, состоит из четырех слоев, здесь пять кадров с метками. Этот фильм-символ будет использоваться в фильме для имитации изменения освещения. Мы включим в проект скрипт, который будет менять освещение при перемещении взломщика по экрану. Если, например, он перемещается влево, то и "свет" переместится влево (кадр с меткой left ). В слой звук мы поместили аудиоэффекты – звук щелчка большим выключателем.

Что ж, вводная часть завершена, пора приступать к написанию скриптов!

  1. Вернитесь на основной монтажный стол. Скройте слой Lights (в котором находится большой черный прямоугольник – экземпляр фильма-символа lights). Открыв панель Действия (Actions), выделите кадр 1 слоя Actions и введите следующий скрипт:
message.text = "Все чисто";
stop ();

Первое действие помещает надпись "Все чисто" в текстовое поле message – сразу после начала фильма. Естественно, если по ходу дела фильм вернется к этому кадру, данное действие будет выполнено опять. Таким образом, если в текстовом поле message выведено "Все чисто", значит, основной монтажный стол находится на кадре 1 и вор на сцене отсутствует. Почему знать об этом так важно, вы поймете через минуту.

Следующее действие останавливает воспроизведение монтажного стола на этом кадре до тех пор, пока мы не позволим продолжить.

  1. Выделите кнопку Tiny и присоедините к ней следующий скрипт:
on (release) {
  if (message.text == "Все чисто") {
    size = 50;
    gotoAndStop ("Burglar");
  } else {
    burglar._xscale = 50;
    burglar._yscale = 50;
  }
}

Если эта кнопка нажата и отпущена, будет выполнен один из двух наборов действий, в зависимости от того, находится ли основной монтажный стол на кадре с меткой Clear (нет вора) или с меткой Burglar (вор на сцене). По существу, данный скрипт говорит, что если поле message содержит текст "Все чисто" (а это верно только в том случае, если основной монтажный стол находится на кадре 1, и вора на сцене нет), то надо присвоить переменной size значение 50 и переместить основной монтажный стол к кадру с меткой Burglar. В этом кадре вор появится. Переменная size будет использоваться для установки размера вора при его первом появлении на сцене. Если message содержит не "Все чисто", а что-то другое, эти действия игнорируются и вместо них выполняются следующие. Уже ясно, что основной монтажный стол находится на кадре с меткой Burglar, и экземпляр фильма-символа burglar на сцене присутствует. В данной ситуации размер экземпляра фильма-символа burglar (по вертикали и горизонтали) масштабируется до 50 процентов от оригинального размера.

  1. Выделите кнопку Small и присоедините к ней следующий скрипт:
on (release) {
  if (message.text == "Все чисто") {
    size = 75;
    gotoAndStop ("Burglar");
  } else {
    burglar._xscale = 75;
    burglar._yscale = 75;
  }
}

Это просто вариация скрипта, присоединенного к предыдущей кнопке. Единственное различие – то, что size получает значение 75, а два последних действия масштабируют экземпляр фильма-символа burglar (если он присутствует на сцене) до 75 процентов.

  1. Выделите кнопку Normal и присоедините к ней следующий скрипт:
on (release) {
  if (message.text == "Все чисто") {
    size = 100;
    gotoAndStop ("Burglar");
  } else {
    burglar._xscale = 100;
    burglar._yscale = 100;
  }
}

Еще одна вариация того же скрипта. Отличие в том, что size получает значение 100, а два последних действия масштабируют экземпляр фильма-символа burglar (если он на сцене) до 100 процентов, то есть возвращают к оригинальному размеру.

  1. Выделите кнопку No Burglar и присоедините к ней следующий скрипт:
on (release) {
  gotoAndStop ("Clear");
}

Эта кнопка будет делать только одно: перемещать основной монтажный стол к кадру с меткой Clear – где, как вы помните, экземпляр фильма-символа burglar отсутствует. Как только произойдет возврат к кадру 1, действия, которые мы к нему присоединили на шаге 4, будут выполнены вновь.

Итак, кнопки Tiny, Small и Normal "выводят" вора на сцену и изменяют его размер. Кнопка, которую мы запрограммировали только что, убирает вора с экрана.

Остальной программный код нашего проекта будет присоединен непосредственно к экземпляру фильма-символа burglar.

  1. Переместив основной монтажный стол к кадру с меткой Burglar, выделите экземпляр фильма-символа burglar и присоедините к нему следующий скрипт:
onClipEvent (load) {
  startDrag (this, true);
  this._xscale = _root.size;
  this._yscale = _root.size;
  _root.lights.gotoAndStop("bottom");
  _root.mouseXPosition.text = _root._xmouse;
  _root.mouseYPosition.text = _root._ymouse;
  _root.message.text = "ТРЕВОГА!";
}

Этот набор действий запускается, как только данный фильм-символ появляется на сцене (загружается – load ) в результате перехода основного монтажного стола к соответствующему кадру. Первое действие приводит к тому, что сам ( this ) фильм-символ burglar становится перетаскиваемым. Два следующих действия масштабируют фильм-символ по вертикали и горизонтали в соответствии со значением переменной size (которая находится на основном – root – монтажном столе). Как вы помните, значение этой переменной устанавливается любой из трех кнопок: Tiny, Small, Normal. При нажатии какой-либо из них происходит следующее: переменной size присваивается значение (50, 75 или 100 – в зависимости от кнопки); основной монтажный стол отправляется к кадру, содержащему экземпляр фильма-символа, и, после загрузки последнего, значение переменной size используется для установки размера вора.

Следующее действие указывает экземпляру фильма-символа lights перейти к кадру с меткой bottom. На этой метке он выглядит так, словно освещена нижняя часть экрана. Это будет просто установка "по умолчанию". Вскоре мы сделаем фильм-символ lights более динамичным.

Следующие два действия отображают текущую позицию указателя мыши по X и Y в текстовых полях основного монтажного стола ( mouseXPosition и mouseYPosition, соответственно).

Последнее действие выводит надпись "ТРЕВОГА!" в текстовом поле message на основном монтажном столе – это знак, что взломщик объявился.


  1. Добавьте этот скрипт после предыдущего:
onClipEvent (enterFrame) {
  _root.time++;
  _root.timeAmount.text = _root.time;
  _root.timer._rotation = _root.timer._rotation + 1;
}

Для выполнения этих трех действий используется событие enterFrame – а оно происходит 24 раза в секунду (такова частота кадров в нашем фильме). Стало быть, с такой же частотой будет выполняться этот набор действий.

В первом действии используется переменная time – она содержит некое число. Посредством оператора ++ (инкремент) значение этой переменной увеличивается на 1 каждый раз, когда происходит событие enterFrame (24 раза в секунду). Такое выражение равнозначно следующему:

_root.time = _root.time + 1;

Следующее действие отображает значение переменной time в текстовом поле timeAmount.

Последнее действие 24 раза в секунду поворачивает на 1 градус экземпляр фильма-символа timer. Таким образом создается эффект "секундомера", отсчитывающего время, пока вор находится на сцене.


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

Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989