Управление несколькими клипами
Исходный файл: Gears.fla.
Я также создал улучшенную версию ролика под названием Gears.fla. За исключением кода ролик ничем не отличается от предыдущего. В Gears.fla клипы расположены таким образом, что зубья шестеренок соприкасаются. Чтобы создать эффект работающего механизма, каждый ролик изначально повернут относительно предыдущего на 15 градусов. Соседние зубья каждой шестеренки расположены с интервалом в 30 градусов, поэтому зубья соседних шестеренок сцепляются. Кроме того, каждая шестеренка вращается в направлении, отличном от направления вращения предыдущей. Вот как выглядит код:
onClipEvent(load) {
initialRotation
=
0
;
// Создаем 10 клипов,
for
(i
=
0
; i
<
10
; i
+
+
) {
// Присоединяем очередной клип.
_root.attachMovie(
"sample"
,
"sample"
+
i, i);
// Устанавливаем координаты
_root[
"sample"
+
i]._x
=
i
*
37
;
_root[
"sample"
+
i]._y
=
100
;
// Устанавливаем каждому следующему поворот
// на 15 градусов относительно предыдущего.
_root[
"sample"
+
l]._rotation
=
initialRotation;
initialRotation
+
=
15
;
onClipEvent(enterFrame) {
// Пробегаем все клипы через один.
for
(i
=
0
; i
<
10
; i
+
=
2
) {
// Поворачиваем по часовой стрелке.
_root[
"sample"
+
i]._rotation
+
=
5
;
// Следующий поворот против часовой стрелки.
_root[
"sample"
*
(i
+
1
)]._rotation
-
=
5
;
}
}
}
}
Чтобы понять, как устроен код, откройте ролик Gears.fla и поработайте с ним. Этот, а также многие другие коды, которые вы встретите в данной книге, невозможно объяснить только теоретически. Для того чтобы до конца понять устройство и работу примеров, следует поработать с ними.
Обработчики событий
Во Flash 5 единственным способом отслеживания таких событий, как, например, enterFrame, было использование обработчиков onClipEvent в сценариях клипа. В версии MX появилась возможность использовать обработчики прямо в сценарии кадра.
Вот простой пример. Этот сценарий помещен в кадр и посылает сообщение в окно Output при каждом обращении к кадру.
root.onEnterFrame
=
function
() {
trace(
"enterFrame Event"
);
}
Вместо команды trace вы можете использовать другие команды аналогично тому, как это делалось на протяжении этого урока. Можно также определить имя для функции, обрабатывающей событие. Тогда предыдущий пример можно записать в таком виде:
root.onEnterFrame
=
myFunction;
function
myFunction() {
trace(
"enterFrame Event"
);
}
С помощью этого приема можно обращаться к любым событиям, например onMouseUp, onKeyUp, onLoad и т.д. Полное описание процедур обращения к событиям вы можете найти в документации. Пример использования данной технологии можно найти в главе 13 начиная с игры "Найди картинку".