Управление несколькими клипами
Исходный файл: 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 начиная с игры "Найди картинку".
