Опубликован: 07.11.2006 | Уровень: специалист | Доступ: свободно
Лекция 7:

Интерфейсы AсtionScript

Аннотация: В этой лекции описана новая модель поддержки событий во Flash MX, также рассказано об интересных командах setInterval и watches.

Введение в события и управляющие элементы

Внимание! Для работы с этой лекцией необходимы учебные файлы, которые Вы можете загрузить здесь.

Одним из наиболее важных изменений во Flash MX является новая модель поддержки событий. Она полностью изменяет представление о способе кодирования анимации и взаимодействия с клавиатурой и мышью. Вы уже кое-что узнали об этом из нашей книги, рассмотрим теперь эту тему подробнее.

Мы рассмотрим несколько важных событий, которые имеют отношение к анимации и интерактивности и представляют хорошую модель для структуры фильма, основанной на коде. Мы также рассмотрим некоторые связанные с этим возможности, такие как setInterval и watches.

Основные определения

Событие - это что-то, что происходит в фильме во время его выполнения. Определенные объекты в фильме могут воспринимать эти события и реагировать на них. Чаще всего применяются события, которые происходят при возникновении нового кадра в фильме, движении мыши, нажатии кнопки мыши или клавиши.

Управляющий элемент события (или управляющий метод события) - это функция, которая выполняется при возникновении определенного события.

Приемник - это объект, который может воспринимать и обрабатывать определенные типы событий с управляющим элементом событий.

Рассмотрим в качестве примера onEnterFrame. Сначала создадим фильм - ничего экстраординарного, просто небольшую фигуру. Назовем его mc1_mc. Теперь мы должны убедиться, что фильм по умолчанию является приемником события enterFrame. Каждый раз при переходе Flash к новому кадру происходит событие enterFrame, и наш mc1_mc должным образом информируется об этом факте. В данный момент это не имеет большого значения, так как мы не определили управляющий элемент события для его обработки, но он предупрежден о событии и готов приступить к действиям, если мы дадим соответствующую команду.

Теперь определим функцию для управляющего элемента. Введите этот код в кадр 1 фильма.

function move() {
    this._x++;
}

Сейчас это просто функция с именем move. Она берет какой-либо объект, вызывает эту функцию и перемещает его на один пиксель вправо. Функция довольно проста. Теперь присвоим эту функцию управляющему элементу onEnterFrame фильма mc1_mc.

mc1_mc.onEnterFrame = move;

Обратите внимание на ключевое слово this в коде выше. Когда вы используете параметр или переменную саму по себе (без пути), подразумевается, что он (она) принадлежит текущей временной диаграмме. Если опустить выражение this в этом блоке кода, _x примет значение _root._x, и наша функция переместит не mc1_mc, а весь фильм целиком!

При указании выражения this в функции идет ссылка на всякий объект, вызывающий эту функцию. В данном случае фильм mc1_mc вызывает функцию move, поэтому this._x переходит к mc1_mc._х, что нам и требуется.

При выполнении этого кода mc1_mc обнаруживает событие enterFrame в начале каждого нового кадра, которое вызывает его метод onEnterFrame (теперь - функция move () ). В результате фильм медленно скользит поперек рабочего места.

Об этом уже говорилось в данной книге, но теперь мы рассмотрим все более подробно. При определении переменной, например, name="Keith", Flash отводит место в памяти вашего компьютера и помещает туда значение "Keith". Если вы ранее присваивали значение, к примеру, name="Todd", то оно будет заменено в памяти новым значением. Аналогичный процесс происходит при определении функции.

Когда мы пишем

function move() {
    this._x++;
}

Flash отводит место в памяти для хранения всех команд, содержащихся в функции. Если вы дополните команду move() двумя скобками, Flash перейдет в это местоположение в памяти и выполнит все выражения, которые там будут обнаружены. Хотя это и очевидно, но насколько известно, при поддержке событий достаточно важно то обстоятельство, что имя функции без скобок тоже несет в себе определенный смысл.

Имя функции само по себе может восприниматься как переменная, которая содержит адрес функции в памяти. Вы можете себе представить почтовое отделение, на стене которого подвешены небольшие металлические почтовые ящики. Каждый из них имеет свой номер, который говорит о положении ящика, и некоторое содержимое, т.е. почту. Имя функции можно сравнить со стопкой бумаги с номером ящика на ней. Этот номер означает, где находится ваша функция. С технической точки зрения это значит, что переменная move содержит ссылку на функцию. Вы можете присвоить переменной значение и затем передать это значение другой переменной, и точно так же вы можете передавать ссылки функции. Давайте рассмотрим следующий код:

function hello() {
trace("hi  there");
}

Игорь Хан
Игорь Хан
След не остается
Александр Коргапольцев
Александр Коргапольцев
Вопрос по содержанию лекции №2, курс Flash MX Studio
Евгения Новоселецкая
Евгения Новоселецкая
Россия
Станислав Бакулин
Станислав Бакулин
Эстония, Нарва