Первые выпуски рассылки будут посвящены основам программирования на Flash...
Наверное, вы не раз видели заставки или даже целые сайты на Flash, поражающие
красотой, небольшим размером, и, главное, интерактивностью! Как приятно, когда
вроде бы простенький баннер начинает меняться, превращаясь в навигационную
панель, всего лишь при наведении на него мыши.… И это ещё что!
Для этого и еще много чего другого придумали ActionScript. “Но есть же Java!?”,-
скажут продвинутые юзеры. Да есть, и это направление приобрело достаточно
широкую известность. Но до поры до времени.… Уже с появлением Flash 4, ActionScript
стал предпочтительней, так как давал широкие возможности при работе с графикой.
И всё таки он не получил одобрения масс: скриптовый язык был достаточно сложен,
коряв. Ситуация резко изменилась с появлением пятой версии Flash. Вот об этой
версии и пойдет речь.
На самом деле ActionScript не настоящий язык программирования, а всего лишь
язык написания сценариев для различных объектов во Flash. Но, объединив его
с тем же JavaScript или VBScript, получится достаточно мощный инструмент для
разработки Web-приложений.
Итак, надеюсь, я убедил вас в необходимости изучения ActionScript и, соответственно,
Flash.
Написание ActionScript сродни программированию на Java. Я имею ввиду синтаксис.
Вводить скрипты можно прямо в панель Action, используя Expert mode, или отдельно,
набирая текст, например, в Блокноте, вставив в Action директиву #include "filename.as";,
где filename.as – файл, включающий ActionScript (.as - рекомендуемое расширение).
Первый вариант предпочтительней, так как встроенный редактор автоматически
раскрашивает зарезервированные константы, функции и т.д. делая код удобочитаемым
и понятным. Кроме того, всегда можно вставить почти любую функцию в код, используя
только удобные панели-кнопки.
Постепенно сложность скриптов будет увеличиваться, что потребует определённых
усилий с вашей стороны. Поэтому научитесь использовать встроенную справку,
она еще не раз поможет в тупиковых ситуациях.
Для закваски рассмотрим простой пример. Наша задача заставить шарик двигаться
при нажатии кнопки “Play”.
Открываем новый фильм. Рисуем шарик. Нажатием F8 конвертируем его в клип,
в поле Name можно ввести всё, что угодно, например, Ball. Дальше делаем кнопку.
Есть два способа: нарисовать свою или воспользоваться библиотекой Buttons
(меню Window->Common Libraries->Buttons). Я предпочитаю второй. Должен
получиться примерно такой рисунок:
Выделяем только кнопку. Можно щелкнуть правой кнопкой мыши и выбрать пункт
Action, а можно просто нажать Ctrl+Alt+A. В появившемся окне введите следующий
скрипт (если буквы не вводятся, переключитесь в Expert mode клавишами Ctrl+E,
обратно в Normal mode – Ctrl+N):
on (release) {
_root.dx = random(20)-10;
_root.dy = random(20)-10;
}
Здесь всё достаточно прозрачно. При нажатии кнопкой мыши на кнопку, инициализируются
две переменные dx и dy. Если вы перейдете в нормальный режим и выберите первую
строчку кода, то наверняка увидите внизу панели Action целую кучу различных
Event, то есть событий, при которых будут выполняться действия в фигурных скобках.
Вы можете выбрать несколько событий или все сразу. Конструкция on ( Event )
характерна только для кнопок, и вы не можете написать ее в Action клипа.
Теперь определимся с переменными. В ActionScript есть несколько типов данных:
строки, числа, логический тип, объекты и клипы. Все остальные типы, кроме чисел,
мы рассмотрим позже. Вообще, числовая переменная должна быть объявлена вот такой
конструкцией: var variableName1 [= value1] [...,variableNameN [=valueN]];, где
variableName1, variableName2,… имена переменных, а value1, value2,… - значения
переменных. Но ActionScript в этом отношении нас не лимитирует: где написал
переменную, там она и объявилась. Кроме того, объявленная таким образом переменная
будет локальной, то есть невидимой для скриптов из других клипов или фреймов.
Приписка _root перед переменными объявляет и присваивает им определённые значения
на уровне Root, то есть на самом низком уровне всего фильма. Можно было бы обойтись
и без _root, но тогда нужно сделать так: в Instance шарика пишем ball, исправляем
переменные на _root.ball.dx и _root.ball.dy. Теперь в Action шарика можно использовать
dx и dy без _root. Дело в том, что написав в Instance ball, мы тем самым дали
клипу уникальное имя. Зная имя клипа, можно обратиться к любой его переменной.
Для этого можно использовать Dot Sintax, когда мы написали _root.ball.dx, или
вот такую конструкцию:
with (object) {
statement(s);
}
где object – объект, например клип, statements – команды, инструкции объекту.
В нашем случае нужно было бы написать:
with (ball) {
dx = random(20)-10;
dy = random(20)-10;
}
Это всё, что касается обращения к объектам.
В Action для шарика пишем:
onClipEvent (load) {
_root.dx = 0;
_root.dy = 0;
this._rotation+=1;
}
onClipEvent (enterFrame) {
this._x += _root.dx;
this._y += _root.dy;
if ((this._x>=550-this._width/2) or (this._x<=this._width/2)) {
_root.dx = -_root.dx;
}
if ((this._y>=400-this._height/2) or (this._y<=this._height/2)) {
_root.dy = -_root.dy;
}
}
Если вы заметили, этот скрипт состоит из двух частей. Первая часть - onClipEvent(load).
После этой инструкции команды в фигурных скобка будут выполняться только при
загрузке клипа и только один раз. Это свойство удобно использовать для начальной
инициализации объектов, переменных и т.д. Если вы воспользовались предыдущими
советами и изменили скрипт для кнопки, то вам придется изменить названия переменных
в этом скрипте: напишите просто dx или dy вместо _root.dx и _root.dy.
Инструкция onClipEvent(enterFrame) выполняется бесконечно долго, пока существует
клип. Внутри этой инструкции находится код, который двигает шарик, меняет направление
движения при вылете шарика за границы экрана. Конструкция this._x обозначает
буквально следующее: координата x данного клипа. This – инструкция, которая
указывает на тот клип или объект, в котором написан скрипт. Обозначение _x,
также как и _y, относится к так называемым свойствам клипа или объекта. Данные
свойства обозначают x и y объекта. this._x += _root.dx; и this._y += _root.dy;
изменяют текущее положение клипа на приращение dx и dy. Конструкция Variable1
+=Variable2(value2) означает то же, что Variable1 = Variable1 +Variable2(value2).
Свойство _rotation позволяет вращать клип по часовой стрелке, если увеличивать
значение _rotation, либо против часовой стрелки, если уменьшать его. Благодаря
двум условиям шарик отскакивает от стен. Свойства _width и _height обозначают
ширину и высоту клипа. Использование этих свойств в условии позволяет вместо
шарика нарисовать любую фигуру: клип всё равно будет отскакивать, не выходя
за пределы экрана (только расположите фигуру по центру клипа). Если одно из
условий выполняется, переменная dx или dy меняет своё значение на противоположное.
Теперь нажмите Ctrl+Enter или F12, чтобы посмотреть, что же у вас получилось.
При нажатии кнопки, шарик должен начать двигаться, причем при последующих кликах
он должен изменять скорость и направление.
Наверное вы заметили, что при движении шарик закрывает кнопку. Если вы уже работали
с Falsh раньше, то знаете как исправить ситуацию: выделить кнопку, нажать Ctrl+стрелка
вверх, или выделить шарик, нажать Ctrl+стрелка вниз. Это замечательное свойство
вызвано “слоистостью” Falsh. Каждый новый клип автоматически располагается на
новом уровне, начиная с нулевого. Но самое замечательное – возможность менять
номер слоя в скриптах.
Для демонстрации этой возможности нам нужно конвертировать кнопку в MovieClip
кнопкой F8, написать в Instance получившегося клипа - button. Теперь в Actions
шарика в пределах первого и второго условий допишем:
this.swapDepths(_root.button);
Функция swapDepths меняет level клипa button на level клипа ball. После отскока
от стенки шарик будет пролетать то сверху, то снизу кнопки.
На сегодня это всё. Я ставил задачу не сделать какой-нибудь крутой скрипт, а
научить основам. Если у вас что-то не получилось, внимательно перечитайте все
заново. Внимательно пишите скрипты:ActionScript чувствителен к регистру букв.
На данном этапе важно понять принцип работы скриптов, поэтому чаще используйте
встроенную справку, прочитайте встроенный обучающий курс.