Чтобы человек мог управлять ходом развития событий, нужно научиться принимать информацию от пользователя и изменять состояние объектов на экране. Для этого надо написать программу набор команд на языке ActionScript.
Язык ActionScript относится к группе скриптовых языков и очень похож на JavaScript. Он использует многие правила грамматики, заимствованные из языка Си. В Приложении можно найти основные сведения, необходимые для понимания приведенных здесь программ.
С помощью языка ActionScript можно
Вместе с тем поддерживается и старый «простой» вариант язык ActionScript 2.0, который и будет использоваться далее в этом учебнике.
Запомните, что при создании новых FLA-файлов здесь нужно всегда выбирать тип документа Flash File (ActionScript 2.0). |
Программа на ActionScript называется сценарием. Она состоит из отдельных блоков кода, которые могут связаны с некоторыми элементами фильма:
Кнопки в нижней части поля имеют следующий смысл
перейти в начальное положение | |
начать (продолжить) движение | |
остановить движение |
Откройте файл ship.fla из папки PRACTICE\7 и просмотрите ролик. |
Перейдите в кадр 15 слоя Судно и нажмите клавишу F9, чтобы вывести на экран панель Actions.
Введите код:
stop();
Просмотрите результат.
|
Для того, чтобы продолжить проигрывание фильма, мы добавим на сцену кнопку символ специального типа.
Создайте новый символ (клавиши Ctrl+F8) типа Button (кнопка) и назовите его Кнопка_Старт. Нарисуйте примерно вот такую кнопку: Вставьте новый ключевой кадр в кадре Over и измените цвет стрелки на светло-зеленый. Затем вставьте ключевой кадр в кадре Down и измените цвет стрелки на красный. |
Мы не задали никакого изображения в кадре Hit, это значит, что областью реагирования является вся непрозрачная область последнего кадра Down.
Теперь добавим звук, который будет сигнализировать о нажатии кнопки.
Добавьте новый слой Звук и вставьте новый ключевой кадр Down. Перетащите на поле звук click.wav из библиотеки. |
На панели Properties можно увидеть свойства этого звука:
Характеристики звука видны в нижней строчке: частота дискретизации 22 кГц, монофонический (левый и правый каналы звучат одинаково), 8-битное кодирование, время звучания 0,1 сек, размер файла 2,7 Кб.
Список Effect (эффект) позволяет выбрать один из стандартных эффектов (затухание, переход с левого канала на правый и т.п.). Значение None означает, что никакой эффект не применяется. Кнопка Edit служит для ручной настройки эффектов.
Параметр Sync для кнопок должен принимать значение Event (событие). Правее Repeat 1 означает повторение 1 раз. Кроме Repeat возможен еще вариант Loop (зацикливание, бесконечное повторение).
Вернитесь к сцене. Создайте новый слой Кнопки, выделите кадр 1, перетащите кнопку из библиотеки в нижнюю часть поля и отрегулируйте ее размер. |
on ( release ) { play(); }
Слово on начинает обработчик события, release (освобождение) в скобках указывает само событие отпускание мыши над кнопкой. Далее внутри фигурных скобок записывают команды, которые нужно выполнить: в данном случае продолжить проигрывание фильма.
Язык ActionScript использует правила записи команд, очень похожие на язык Си. Каждая команда заканчивается точкой с запятой.
Нажав на кнопку (или клавиши Ctrl+T), можно проверить правильность записи кода (соответствие правилам языка ActionScript). Если вы увидели сообщение "The script contains no errors.", ошибок нет. Сообщения об ошибках выводятся в специальном окне Compiler Errors (оно появляется автоматически или может быть вызвано нажатием клавиш Alt+F2).
Кнопка позволяет закрепить активное окно с кодом. Дело в том, что код может быть разбросан по нескольким местам (кадрам, кнопкам, клипам). В активном окне мы видим тот блок, который выделен в левой части панели Actions. Если прикрепить какой-то блок, он будет всегда показываться как вкладка в основном окне:
На рисунке активное окно это код, связанный с кнопкой Стоп, а код кнопки Стоп был прикреплен и показывается в виде вкладки.
Выделите кнопку и добавьте в окне Actions код
on (release) { play(); }Щелкните по кнопке , чтобы проверить правильность набранного кода, а затем по кнопке для автоматического выравнивания. |
В левой части панели Actions находится справочная информация (Toolbox). Сверху списки функций и операторов языка (их можно вставлять в код щелчком мыши), ниже список всех объектов, с которыми связан код ActionScript. Сейчас видно, что какой-то код есть в кадре 15 слоя Судно (Судно: Frame 15) и у кнопки (элементы блока Scene 1). В данный момент мы редактируем код кнопки (Current Selection). Это окно удобно использовать для быстрого перехода от одного блока кода к другому.
С помощью кнопки можно убрать панели Toolbox, оставив только редактор кода.
Выделите кадр 1 и добавьте к нему код stop();Закройте панель Actions и проверьте работу фильма. |
Теперь добавим еще 2 кнопки: для остановки фильма и для перехода в начало. Поскольку на них должен быть другой рисунок, в библиотеке нужно создать еще два символа-кнопки. Например, можно продублировать существующую кнопку и изменить рисунок, выбрав команду Duplicate из контекстного меню, которое появляется при нажатии правой кнопки мыши на названии символа в библиотеке.
Создайте кнопку с именем Кнопка_Стоп для остановки проигрывания. Для этого продублируйте кнопку в библиотеке, дайте ей новое имя и исправьте рисунки во всех кадрах (Up, Over, Down). Добавьте новую кнопку на слой Кнопки и настройте так, чтобы она останавливала фильм. |
Добавьте еще одну кнопку ,
которая возвращает фильм в начало (к кадру 1) с помощью
кода
on (release) { gotoAndPlay(1); }Проверьте ролик. |
Измените команду, связанную с последней кнопкой, на
gotoAndStop(1);
и посмотрите, что изменилось.
|
Когда в библиотеке очень много элементов, список получается очень длинный и в нем сложно разобраться. Чтобы облегчить жизнь, сходные элементы объединяют в папки. Папку в библиотеке можно открывать и закрывать двойным щелчком мыши.
Выделите все кнопки в библиотеке (щелкая на них при нажатой клавише Ctrl) и выберите пункт Move to New Folder (переместить в новую папку) из контекстного меню. Дайте папке имя Кнопки. |
Теперь надо сделать, чтобы кнопки на сцене были одинакового размера, и выровнять их. Для этого используется панель Align (выравнивание, клавиши Ctrl+K). Проверьте, чтобы режим To Stage был отключен (он используется для выравнивания относительно всей сцены).
Выделите все кнопки и включите панель Align. Сначала сделайте одинаковой высоту кнопок ( в группе Match Size). Затем выровняйте центры по вертикали ( в группе Align) и распределите равномерно по горизонтали ( в группе Distribute). |
Для кнопок, так же, как и для клипов, можно применять фильтры (панель Filters).
Для придания кнопкам более красивого вида примените фильтр Bevel и настройте его параметры на ваш вкус. |
Создайте новый слой Метки и выделите кадр 1. На панели Properties введите метку кадра, как показано на рисунке.
Замените команду, связанную с последней кнопкой, на gotoAndStop ( "start" );и проверьте ролик. |
Обратите внимание, что на временной шкале в кадре 1 слоя Метки появилась метка start:
Откройте файл car.fla из папки PRACTICE\7. Создайте два новых слоя: Кнопка и Программа. На слой Кнопка поместите кнопку из библиотеки и просмотрите ролик. |
В первый кадр слоя Программа добавьте код stop();
|
Если теперь просмотреть ролик, выяснится, что машина стоит на месте, но ее колеса вращаются. Это происходит потому, что команда stop() остановила только проигрывание главной временной шкалы, а внутренние клипы (колеса) продолжают работать.
Чтобы ответить на вопрос «Как остановить колеса?» нужно разобраться с адресами внутри флэш-ролика. Но прежде всего, дадим имена объектам на сцене, к которым мы будем обращаться: машине и двум колесам внутри нее.
Выделите машину и на панели Properties введите имя этого элемента car. Откройте клип Машина для редактирования и таким же образом дайте колесам имена wheel1 и wheel2. |
Итак, в этом фильме 4 монтажных стола со своими временными шкалами:
Клип car находится внутри главного монтажного стола _root, а клипы wheel1 и wheel2 внутри клипа car.
Главный монтажный стол _root является «родителем» (parent) для клипа car.
Клип car является «сыном» (child) для _root и родителем для клипов wheel1 и wheel2.
Клипы wheel1 и wheel2 сыновья для car, у них самих нет потомков.
Россия, Санкт-Петербург, 3-я ул. Строителей, д. 25, кв. 12
Здесь на первом месте стоит страна, затем город и т.д.
Для объектов Flash-фильма абсолютный адрес начинается с _root, так что абсолютные адреса всех клипов, показанных на схеме, выглядят так:
Абсолютные адреса не зависят от того, внутри какого монтажного стола они используются.
Чтобы остановить проигрывание для какого-то монтажного стола, надо перед командой stop() поставить его адрес и точку:
_root.stop(); _root.car.stop(); _root.car.wheel1.stop(); _root.car.wheel2.stop();
Если мы применяем абсолютные адреса, нужно помнить, что они станут неверными, если машина будет находиться уже не на главном монтажном столе, а станет частью другого клипа (Вася Пупкин переехал).
Для обращения к родителю используют слово _parent. Например, чтобы из клипа wheel1 остановить проигрывание для монтажного стола клипа car, надо применить команду
_parent.stop();Эта команда сработает из из клипа wheel2, поскольку его родителем также является car.
Если два раза использоать _parent, мы обращаемся к «деду». Например, команда
_parent._parent.stop();останавливает проигрывание на главном монтажном столе из клипа wheel1 или wheel2.
К сыновьям можно обращаться просто по имени. Например, команда
car.stop();
допустима внутри _root. Кроме того, здесь можно было
использовать и слово this (текущий монтажный стол):
this.car.stop();
Для остановки wheel1 из _root можно применить одну из команд
car.wheel1.stop(); this.car.wheel1.stop();
Наконец, самый сложный случай. Обратиться к «брату» можно только через родителя. Чтобы остановить второе колесо из wheel1, надо написать
_parent.wheel2.stop();
Добавьте в код кадр 1 слоя Программа команды, останавливающие вращение колес, а в код обработчика нажатия кнопки команды для запуска вращения колес. Сохраните файл и просмотрите результат. |
Создайте новый слой Звук и перетащите в кадр 1 звук fastcar.wav из библиотеки. Просмотрите результат. |
Получилось, что машина стоит на месте, а звук уже слышен. Чтобы этого не случилось можно начать проигрывать звук со второго кадра.
Перетащите кадр 1 слоя Звук в кадр 2 и просмотрите результат. |
Теперь звук слышен даже тогда, когда ролик начал проигрываться с начала и машина появилась на стартовой позиции. Чтобы остановить звук, надо вставить в слое Звук последний ключевой кадр и выбрать в параметрах звука Sync=Stop (остановить звук).
Вставьте ключевой кадр в последний кадр слоя Звук. На панели Properties в списке Sound выберите fastcar.wav и установите для параметра Sync значение Stop. |
Параметр Sync имеет еще и другие возможные значения:
Верхняя диаграмма показывает звук в левом канале, нижняя в правом. Линии с белыми квадратиками регулируют громкость. В самом начале стоит только один квадратик в начале линии, щелчками мыши можно установить еще 7 узловых точек и, перемещая их, изменить громкость (сверху наибольшая, снизу наименьшая).
Кнопки и позволяют изменять масштаб временной оси, на которой откладываются номера кадров (если нажата кнопка ) или время в секундах (кнопка ).
Кнопки и служат для проигрывания звука (с учетом примененного эффекта) и его остановки.
Откройте окно Edit Envelope, включите режим (номера кадров) и установите удобный масштаб временной оси. Добавив два узла к огибающим, измените их так, как показано на рисунке сверху (звук полностью затухает от 75-го до 100-го кадра). Сохраните фильм, просмотрите окончательный результат и закройте файл. |
Здесь ракету можно перетаскивать мышкой и перемещать клавишами-стрелками на клавиатуре. Кнопки со стрелками на поле изменяют масштаб и угол поворота ракеты (попробуйте!).
Если водить мышью над ракетой, она постепенно становится прозрачной. Чтобы опять сделать ее полностью непрозрачной, надо щелкнуть по центральной кнопке с кружком.
В правой части поля выводятся текущие свойства клипа Ракета:
Откройте файл space.fla из папки PRACTICE\7. Переместите точку регистрации клипа Ракета на ось симметрии ракеты (для этого надо открыть клип для редактирования и переместить изображение так, чтобы крестик оказался в нужном месте). |
Добавьте слой Кнопки и разместите на нем 1 кнопку типа Кнопка0 и 4 кнопки типа Кнопка из библиотеки. С помощью панели Transform (меню WindowsTransform или клавиши Ctrl+T) разверните три кнопки со стрелками на 90, 180 и 270 градусов. Расположите кнопки ровно, так как на образце в начале раздела. |
Центральная кнопка с кружком будет восстанавливать полную непрозрачность ракеты, кнопки «влево» и «вправо» вращают ее (изменяют свойство _rotation), а кнопки «вверх» и «вниз» изменяют размеры (свойства _xscale и _yscale).
В языке ActionScript (так же, как в Си и Java) для операций увеличения или уменьшения значений переменных на некоторую величину часто используется сокращенная запись:
a = a - 5; b = b + 10;выполняется точно так же, как
a -= 5; b += 10;
Добавьте код для кнопок. Центральная кнопка: on (release) { rocket._alpha = 100; }Стрелка «влево»: on (release) { rocket._rotation -= 10; }Стрелка «вправо» то же самое, но со знаком «плюс». Стрелка «вниз» on (release) { rocket._xscale += 5; rocket._yscale += 5; }Стрелка «вверх» то же самое, но со знаком «минус». Просмотрите результат и сохраните файл. |
Добавьте текст _x: и справа от него еще одно текстовое поле для вывода текущей координаты _x. Для него в панели Properties установите тип Dynamic Text, имя x и ширину W=50. |
Для обработки этих событий используются обработчики onClipEvent (...), которые можно добавить на панели Actions, предварительно выделив клип.
При частоте кадров 12, событие enterFrame возникает 12 раз в секунду, даже если клип содержит единственный кадр. Мы используем это событие для того, чтобы постоянно обновлять x-координату ракеты на экране.
Динамическое текстовое поле с именем x имеет свойство text, которое можно изменять из программы (это и есть надпись на экране). Для обращения к свойству объекта используется точка, то есть адрес текста принимает вид x.text. Таким образом, запись текущей x-координаты клипа rocket в текстовое поле x должна выглядеть так:
x.text = rocket._x;
Выделите ракету на сцене и откройте панель Actions (клавиша F9). Введите код обработчика
события enterFrame:
onClipEvent (enterFrame) { x.text = rocket._x; }Просмотрите результат. |
Вы увидели, что x-координата на экране по-прежнему равна нулю, хотя клип находится не на левой границе экрана, и значит его действительная x-координата больше нуля.
Чтобы обнаружить ошибку, мы применим трассировку вывод (в дополнительное окно) отладочных сообщений, которые позволят понять, что в самом деле происходит внутри программы.
Добавьте в обработчик строчку trace ( x );
|
При запуске появится окно Output (включается также через меню WindowOutput или клавишей F2), в котором появляются строчки undefined.
Происходит следующее: мы попросили программу сказать, что же такое x в этой точке, и в ответ получили, что x это непонятно что (undefined, не определено). Значит, текстовое поле x не найдено неверно задан его адрес. Сообщение появляется 12 раз в секунду, каждый раз, когда происходит событие enterFrame. Заметим, что точно такой же результат даст строчка
trace ( rocket );
Значит, обращение к клипу тоже неверно.
Дело в адресах. В обработчиках событий клипа текущим монтажным столом считается сам клип. Поэтому для того, чтобы обратиться к текстовому полю x, которое принадлежит не клипу, а главному монтажному столу, его адрес надо записать в виде _root.x (абсолютный адрес) или _parent.x (относительный адрес).
В правой части оператора надо обратиться к свойству _x текущего объекта, то есть написать this._x (относительный адрес) или _root.rocket._x (абсолютный адрес). Но можно то же самое написать проще, ведь _x обозначает то же самое, что this._x.
Чтобы не ошибиться при обращении к объекту, можно нажать на кнопку и выбрать из списка существующий объект. Программа автоматически вставит его адрес, относительный (при выборе варианта Relative) или абсолютный (вариант Absolute). |
Выделите ракету на сцене и откройте панель Actions (клавиша F9). Исправьте код обработчика
события enterFrame:
onClipEvent (enterFrame) { _root.x.text = _x; }Попробуйте вставить ссылку на текстовое поле с помощью кнопки . |
Добавьте аналогичные пары (статический текст и динамическое текстовое поле) для остальных свойств клипа и дополните обработчик события командами, заполняющими эти поля. Просмотрите результат. |
Заметьте, что координата _x и другие свойства клипа целые числа. При записи в текстовые поля они будут автоматически преобразованы в символьный вид. |
Значения свойств клипа можно не только читать, но и изменять. После загрузки клипа в память мы установим его начальные координаты в обработчике события load.
Добавьте в код клипа Ракета обработчик события load (клип загружен в память):
onClipEvent (load) { _x = 100; _y = 100; } |
Добавьте обработчик события мыши для клипа Ракета:
on (rollOut){ _alpha -= 5; } |
startDrag ( this );В скобках указывается адрес объекта (this означает «текущий объект», то есть клип).
При отпускании кнопки (событие release) надо закончить перетаскивание:
stopDrag();
Добавьте обработчики событий мыши для клипа Ракета:
on ( press ){ startDrag(this); } on ( release ){ stopDrag(); } |
В скобках после слова on можно перечислять через запятую несколько событий, на которые надо реагировать одинаково. Для этого часто удобно использовать средство Script Assist (помощник скриптов).
Выделите строчку кода on(release) и щелкните по словам Script Assist в правом верхнем углу панели Actions. Отметьте флажок releaseOutside и закройте окно повторным щелчком по словам Script Assist. |
Теперь при отпускании мыши за пределами клипа перетаскивание также заканчивается.
Например, мы сделаем, чтобы ракета вращалась против часовой стрелке, если мышь двигается в левой половине поля, и по часовой стрелке, если в правой. Для этого надо написать обработчик события mouseMove, в котором менять свойство _rotation клипа Ракета. Чтобы определить направление вращения, будем сравнивать x-координату клипа с половиной ширины окна, то есть с _root._width/2.
Добавьте еще один обработчик к коду клипа: onClipEvent (mouseMove) { if (_root._xmouse < _root._width/2) _rotation -= 0.5; else _rotation += 0.5; } |
При просмотре обнаруживается неточность: во время перетаскивания ракета продолжает вращаться, ведь событие mouseMove происходит и вызывается обработчик. Чтобы прекратить вращение во время перетаскивания, надо где-то запоминать, что мы тащим ракету. Легче всего сделать это при помощи специальной логической переменной dragging, которая может принимать значения true («да», истина) и false («нет», ложь). В начале перетаскивания мы запишем в эту переменную true, а когда перетаскивание закончено, запишем в нее false.
Измените обработчики событий: on ( press ){ startDrag(this); dragging = true; } on ( release, releaseOutside ){ stopDrag(); dragging = false; } |
Теперь можно использовать значение этой переменной в обработчике mouseMove вращать ракету только тогда, когда dragging=false.
Измените обработчик события: onClipEvent (mouseMove) { if ( ! dragging ) { if (_root._xmouse < _root._width/2) _rotation -= 0.5; else _rotation += 0.5; } } |
Восклицательный знак означает операцию НЕ, так что условный оператор if(!dragging) имеет смысл «если не тащим ракету». Только при этом условии изменяется свойство _rotation.
Главное отличие кнопки от клипа состоит в том, что кнопка (символ типа Button) часть монтажного стола, на котором она находится, а клип (Movie Clip) имеет свой собственный монтажный стол. |
Когда мы используем команду stop(); или this.stop(); в обработчике события кнопки, мы останавливаем проигрывание на ее монтажном столе (в данном случае на _root).
Если же эта команда используется внутри обработчика клипа, она останавливает проигрывание этого клипа (внутреннюю анимацию).
Если команда
_rotation += 45;
стоит в обработчике кнопки, на 45 градусов повернется
ее монтажный стол, то есть _root. Та же самая команда в
обработчике клипа повернет на 45 градусов этот клип.
А если нужно повернуть кнопку? Это тоже можно сделать, но иначе, используя ее относительный или абсолютный адрес. На панели Properties введем имя кнопки. Пусть, например, кнопка с именем btn находится на главном монтажном столе _root. Тогда ее адрес может быть записан как _root.btn или (при обращении с _root) просто btn. Повернуть кнопку в ее же обработчике можно с помощью команды
btn._rotation += 45;
или (из любого места программы!)
_root.btn._rotation += 45;
on (keyPress "A") { ... }Для специальных клавиш указывают название в угловых скобках, например, "<Left>" (влево), "<Right>" (вправо), "<Up>" (вверх), "<Down>" (вниз).
В код клипа добавьте обработчики событий клавиатуры. Для клавиши «влево»:
on (keyPress "<Left>"){ _x -= 2; }и аналогично для остальных клавиш-стрелок. |
К сожалению, в одном обработчике можно задать только реакцию на одну клавишу. Несколько большую свободу дает использование событий клипа keyDown и keyUp, но их обсуждение мы отложим до следующих уроков.
Для перехода к основной сцене нужно щелкнуть мышкой в углублении скульптуры справа от слова пароль и ввести пароль «123».
Теперь мы смотрим на побережье Ладожского озера через иллюминатор. Кнопки позволяют перемещать фотографию на большие расстояния (50 пикселей по оси X и 20 пикселей по оси Y), а клавиши стрелки обеспечивают точную настройку (перемещение с шагом 5 пикселей). Здесь работает также и колесико мыши, с помощью которого можно смещать панораму влево и вправо.
Несложно сообразить, что часть большого рисунка, которая не попадает в область видимости, закрыта с помощью слоя-маски.
Откройте файл PRACTICE\7\panoram.fla. Переименуйте слой Layer 1 в Фон. Установите
масштаб 50% (окно выбора масштаба в правом верхнем углу сцены)
и перетащите на сцену клип Панорама из библиотеки.
На панели Properties дайте клипу имя panoram и установите его координаты X=-725 и Y=0. |
Отключите видимость слоя Фон и увеличьте масштаб до 100%. Создайте новый слой Окно, включите на панели инструментов режим рисования объектов (кнопка ) и нарисуйте черный прямоугольник без контура, занимающий всю сцену. |
Выберите инструмент Oval Primitive (под той же кнопкой, что и прямоугольник) и установите серый цвет заливки. нарисуйте круг, удерживая клавишу Shift. На панели Properties установите его размеры 300 на 300 пикселей, свойство Inner radius = 80. |
Выделите кольцо и выровняйте его по центру сцены с помощью панели Align (клавиши Ctrl+K, кнопки и при включенном режиме выравнивание относительно сцены). |
С помощью панели Color установите для заливки кольца радиальный градиент, который придает объемный вид:
|
Перетащите слой Фон выше слоя Окно. Создайте новый (самый верхний) слой Маска и нарисуйте на нем круг диаметром 240 пикселей (этот диаметр совпадает с диаметром внутренней части кольца). Выровняйте круг по центру сцены. |
Нажмите правую кнопку мыши на названии слоя Маска и выберите команду Mask из контекстного меню. Сделайте видимым слой Фон и убедитесь, что теперь картинка видна через иллюминатор. |
Создайте новый (самый верхний) слой Кнопки и добавьте на сцену кнопку из библиотеки. Уменьшите ее размеры и скопируйте еще 3 раза (перетащив при нажатой клавише Alt). Установите кнопки в нужные места и разверните каждую из них в правильном направлении. Для выравнивания кнопок на сцене можно использовать панель Align. |
Добавьте к кнопке «влево» код обработчика
on (release) { panoram._x += 50; }Аналогичный код добавьте к остальным кнопкам. По оси X сделайте перемещение за 1 раз на 50 пикселей, а по оси Y на 20. Проверьте работу кнопок. |
Выделите любую кнопку и добавьте к ней обработчик клавиши «влево»:
on (keyPress "<Left>") { panoram._x += 5; }Аналогично здесь же запишите обработчики для остальных клавиш-стрелок. Проверьте работу клипа. |
Остался еще один недостаток программа позволяет перемещать рисунок больше, чем нужно, открывая фон за рисунком. Чтобы исправить положение, мы напишем функцию check, которая будет проверять допустимость координат _x и _y и возвращать рисунок в разрешенное состояние. Эту функцию можно связать с первым кадром слоя Кнопки.
Вспомним, что размер рисунка 2000 на 400 пикселей, размер сцены 550 на 400 пикселей, а диаметр круга-маски 240 пикселей. Несложные расчеты показывают, что x-координата левого верхнего угла рисунка должна находиться в интервале от -1605 до 155, а его y-координата в интервале от -80 до 80.
Выделите первый кадр слоя Кнопки и добавьте к нему код
function check() { if ( panoram._x < -1605 ) panoram._x = -1605; if ( panoram._x > 155 ) panoram._x = 155; if ( panoram._y < -80 ) panoram._y = -80; if ( panoram._y > 80 ) panoram._y = 80; }Теперь в конец каждого обработчика (для всех кнопок и клавиш) нужно добавить вызов функции check, например, так: on (release){ panoram._x -= 50; check(); }Сделайте это, сохраните файл и проверьте его работу. |
Добавьте к кадру 1 слоя Кнопки такой код:
ear = new Object(); ear.onMouseWheel = function ( step ) { panoram._x += 5*step; check(); } Mouse.addListener ( ear );Запустите ролик, щелчком мыши сделайте его окно активным и проверьте, как работает горизонтальная прокрутка панорамы с помощью колеса мыши. |
ear = new Object();
в памяти строится новый объект с именем ear. Что это за объект
пока неясно, мы не определили ни его свойства, ни методы.
Далее определяется метод onMouseWheel (mouse мышь, wheel колесо). Это значит, что объект может реагировать на событие mouseWheel (прокрутка колеса мыши), если об этом ему кто-нибудь сообщит. Обработчик события это функция, принимающая один параметр число шагов прокрутки. Как и насколько переместить панораму определяем мы в теле функции (можно было, например, сделать вертикальную прокрутку). После изменения координат идет проверка с помощью функции check.
Самая важная строчка:
Mouse.addListener ( ear );Здесь сказано, что объект ear становится «слушателем» (listener) глобального объекта Mouse (мышь), то есть, будет получать информацию о всех событиях, происходящих с мышью. В частности, при прокрутке колесика происходит событие mouseWheel и будет вызвана написанная нами функция.
Выделите кадр 1 во всех слоях и перетащите его мышкой на кадр 2. |
Выделите кадр 1 слоя Окно и перетащите на него рисунок sphinx.jpg из библиотеки. С помощью панели Properties установите координаты рисунка X=0 и Y=0. |
Включите инструмент . Установите шрифт Arial светлого цвета, размер 20. Добавьте новое текстовое поле в углублении под лапами сфинкса. Выберите тип поля: Input text (поле для ввода текста), стиль Password (ввод пароля). Дайте полю имя pass, по которому мы будем обращаться к нему из программы (см. рисунок ниже). |
Стиль текста Password говорит о том, что вместо вводимых символов на экране видны только звездочки, чтобы посторонние не смогли увидеть верный пароль.
Теперь мы сделаем, чтобы при вводе пароля «123» ролик переходил на следующий слайд с просмотром панорамы.
Выделите кадр 1 слоя Окно и добавьте код:
stop(); pass.onChanged = function () { if ( pass.text == "123" ) nextFrame(); } |
В условном операторе содержимое текстового поля, которое имеет адрес pass.text, сравнивается с правильным паролем «123». Если получено совпадение, происходит переход к следующему кадру по команде nextFrame.
Добавьте слева от поля ввода надпись пароль (статический текст, тип Static Text). Проверьте работу фильма и сохраните его. |
Символы. Анимация движения | Объекты среды Flash |
© 2007 К. Поляков