Минула стаття була присвячена анімації. Ми створювали анімацію на основі motion tweening, shape tweening і просто становили рух з окремих кадрів. Думаю, настав час перейти до більш складної теми, розгляду інструмента, який створює основу для більшості якісних FlashиФільмів (Flash movies).
Цей інструмент - Actionscript - подійно-керована мова, вбудований в Flash. Остання версія Actionscript, ( яка присутня в Flash 5), суттєво відрізняється від Actionscript, який був в 4-м Flash. Якщо в минулій версії, це був обмежений набір команд, що дозволяє здійснювати лише основні дії, що й уводиться за допомогою не дуже зручного інтерфейсу, то новий Actionscript - це потужна мова, зі збільшеним набором команд, підтримкою класів, спадкування (!), і набагато більш зручним інтерфейсом
Actionscript робить ваші сторінки інтерактивними. Ви можете реагувати на події з мишки або із клавіатури, можете виконати які-небудь дії при програванні певного кадра
Для того, щоб опанувати Actionscript повною мірою, бажане вже мати досвід програмування (переважно на З++, Javascript, etc.). Однак, одним з гідностей мови Flash, є те, що вам не потрібно бути професіоналом в Flash, або повністю знати Actionscript, щоб писати на ньому якісний код. Ви можете використовувати ті можливості мови, які порахуєте необхідними для своєї роботи
Тому що ця стаття присвячена основам мови, у ній ми розглянемо:
Панель дій (Actions panel), на якій відбувається практично все спілкування Сactionscript.
Кнопки - як їх змушувати працювати, як нам вимагається
Шляхи - як звертатися до потрібних об'єктів?
Основні дії з FlashтМультиками (movie clips) - ми будемо управляти процесом програвання фільму, як нам буде завгодно.
Налагодження в Actionscript - віконця Output і Debugger.
Ціль цієї статті, дати вам відчути Actionscript, показати, що ця мова може служити, як для створення досить значних програм, так і для виконання елементарних дій, які зроблять вашу сторінку набагато привлекательней.
Терміни
Перш ніж ми перейдемо до конкретних дій, кілька термінів з області Actionscript:
Дії (Actions) - це інструкції, які говорять FlashлМультику що робити. Від них відбулася назва мови - Actionscript (дослівно - сценарій дій). Давайте домовимося, що в рамках цієї статті, ми будемо використовувати термін "інструкція", щоб не плутатися зі справжніми діями, які будемо робити
Події (Events) - це дії, які відбуваються, коли програється мультик. Події, наприклад, можуть відбуватися, коли закінчується завантаження якогось кадра, коли ми досягаємо якогось кадра, коли користувач натискає клавішу на клавіатурі або курсор мишки виявляється над нашим об'єктом
Вираження (Expressions) - це будь-яка частина інструкції, яка породжує значення. Наступні приклади є вираженнями: 2 + 2, 2 * 2, a + b, 2*pi*r, (15 + k) * random(10).
Функції (Functions) - це блок коду, який можна багаторазово використовувати. Функції можна передавати значення й одержувати від неї результат, що вертається. Наприклад, number=get_color(15, 24). 15 і 24 є аргументами (або параметрами) функції get_color значення, що вертається, якої записується в змінну number.
Класи (Classes) - це типи об'єктів. Наприклад, клас дерева - рослина. В Flash є деяка кількість визначених класів (дуже схожих на класи Javascript). Ви можете створювати свої класи, або модифікувати існуючі
Екземпляри (Instances) - це буквально екземпляри певних класів. Наприклад, екземпляром рослини можуть бути дерево, кущ або квітка. Екземпляр - це вже конкретний реальний об'єкт. Якщо клас - це визначення об'єкта (екземпляра), то екземпляр - це вже конкретне втілення, це клас у дії. Кожному екземпляру можна привласнити ім'я, щоб через нього звертатися до функцій або змінних об'єкта
Оброблювачі (Handlers) - це спеціальні інструкції, які обробляють події. Наприклад onclipevent -
оброблювач дій, пов'язаних з конкретним символом (див. Macromedia
Flash ч. 2).
Оператори (Operators) - це елементи мови, які обчислюють значення, виходячи з одного або більш аргументів. Наприклад, оператор додавання (+) повертає суму двох значень, що коштують ліворуч і праворуч від нього
Змінні (Variables) - це ідентифікатори, які можуть зберігати значення. Наприклад, a=5; або name="Michael".
Ці терміни ми будемо використовувати під час обговорення Actionscript. Отже…
Панель дій (Actions Panel)
Панель дій служить для відображення й уведення Actionscript програм (мал. 1). Існує два режими роботи з панеллю - нормальний ( для "чайників") і експертний. В експертному режимі список команд - це просте поле для введення тексту. У нормальному ж режимі, ми не можемо прямо редагувати команди. Для цього використовується панель параметрів
Додати інструкцію можна, нажавши на кнопку "+" (див. мал. 1) або вибравши відповідну інструкцію в списку елементів мови. Крім того, для всіх дій в Flash є послідовності клавіш, за допомогою яких це можна зробити набагато швидше. Вони наведені праворуч від кожної дії в меню кнопки "+". Наприклад, щоб додати функцію stop(), потрібно нажати Esc+st (послідовно: Esc, потім "s", потім "t").
Вилучити інструкцію можна, вибравши її, і нажавши кнопку "-" (або просто клавішу Delete).
Я рекомендую вам не починати відразу ж користуватися експертним режимом, якщо у вас немає досвіду програмування на Javaо Подібних мовах (З++, Java, Javascript). У нормального режиму є велика гідність, що робить його незамінним для новачків - у ньому є набагато менше шансів помилитися із синтаксисом мови. Новачкам це допоможе швидше зрозуміти тонкощі Actionscript.
Рис. 1 - Панель дій
У панелі дій відображаються дії об'єкта, або кадра, обраного в даний момент
Кнопки
Перше, що хочеться, коли починаєш вивчати интерактивность Flash - зробити що-небудь, що б відгукувалося на дії користувача, "пожвавити" ваш утвір, додати зворотний зв'язок. Найпростіший спосіб зробити це - кнопки. Тому з ниххте ми й почнемо
Як ви знаєте, в Flash існує спеціальний тип символу для створення кнопок - Button (див. Macromedia Flash ч. 2). Будемо вважати, що ви вже навчилися створювати кнопки, тепер навчимося відслідковувати натискання на ці кнопки
Кнопки в Macromedia Flash мають великий список подій, на які ми можемо реагувати:
press - клавіша мишки натиснута, коли курсор перебуває в межах кнопки;
release - клавіша мишки віджата, коли курсор перебуває в межах кнопки;
releaseoutside - клавіша мишки віджата, коли курсор перебуває поза межами кнопки;
rollover - курсор миші входить у межі кнопки;
rollout - курсор виходить за межі кнопки;
dragover - курсор входить у межі кнопки, при цьому була натиснута кнопка, і натиснута клавіша миші;
dragout - курсор виходить за межі кнопки, при цьому була натиснута кнопка, і натиснута клавіша миші;
keypress ("клавіша") - була натиснута "клавіша". Список клавіш можна подивитися в довідці по Flash (об'єкт Key), або використовувати панель параметрів для введенню потрібної клавіші
На жаль, Flash "розуміє" тільки ліву клавішу миші. Права використовується для виклику контекстного меню (клацніть правою клавішею на якому-небудь Flash мультику). Способів відловлювати в Flash середню клавішу або "коліща" (mouse wheel), я поки не зустрічав, думаю, що їх не існує
Перехоплюються ці події за допомогою директиви on().
Синтаксис її такий:
on (подія)
{
... // Наші дії
}
Нижче ви можете самі спробувати викликати деякі події:
Дуже часто використовуваний приклад - перехід по посиланню при натисканні на кнопку:
on (release)
{
geturl("http://rubs.boom.ru");
}
Щоб перевірити цей сценарій, виділите вашу кнопку, натисніть Ctrl+Alt+A і введіть програму.
От так просто можна перехопити всі події, пов'язані із кнопкою. Ну а як їх використовувати - це справу винятково вашої уяви
Основні дії з Movie Clips
Величезна частка творчості в Flash припадає на маніпуляцію символами. Практично всі базові приймання, усі трюки й ефекти нездійсненні без цих дій
За допомогою сценаріїв на Actionscript ви можете виконувати практично будь-які дії над символами. Треба тільки пам'ятати, що виконати ці дії можна тільки або у відповідь на дію користувача, або при настанні якогось кадра на часовий шкалі
Отже, що ж у нас є? Я перелічу тільки основні (на мій погляд) інструменти. Решта ви знайдете в списку елементів мови або впомощи.
Функції кліпів (movie clip), які можна викликати:
play() - починає або відновляє відтворення кліпу;
stop() - зупиняє відтворення кліпу;
gotoandplay() - переходить на певний кадра (сцену) і продовжує відтворення;
gotoandstop() - переходить на певний кадра (сцену) і зупиняє відтворення
Властивості (параметри) кліпів, які можна зчитувати/змінювати:
_x, _y - координати кліпу (у пикселях);
_xscale, _yscale
- масштаб кліпу (у відсотках), відповідно по горизонталі й по вертикалі;
_width, _height -
ширина й висота кліпу (у пикселях);
_rotation - кут повороту кліпу (у градусах);
_alpha - прозорість кліпу (у відсотках);
_visible - видимість
Це далеко не все, що можна робити із кліпами. Використовуйте інші параметри, експериментуйте, творите!
Імена
Для того, щоб звертатися до кліпів, нас буде потрібно розібратися з поняттям імені об'єкта (instance name) і шляхи до об'єкта (target path). Домовимося,
що кліп (movie clip) і об'єкт для нас - однакові речі.
Ім'я об'єкта - це ім'я конкретного екземпляра символу. Скажемо в нас може бути символ - машинка, а екземпляри цього символу будуть називатися
"Машинка1", "Машинка2", "Pickup", "Запорожець"…
Для того щоб дати ім'я об'єкту потрібно виділити об'єкт, і в панелі Instance (Window->Panels->Instance, Ctrl+I) у графові Name увести ім'я об'єкта (мал. 2). Імена можуть полягати тільки з букв, цифр і символу підкреслення ("_"), причому ім'я не може починатися сцифры.
Рис. 2 - Панель Instance
Шляхи
Шлях до об'єкта - це запис імені об'єкта з урахуванням ієрархії. Спробую пояснити, що це таке
Ви знаєте, що в Flash об'єкти можна "вкладати" друг у друга, становлячи, таким чином, ієрархію. Отож, ця вкладеність забезпечує не тільки зручність в обігу з об'єктами, вона ще й обмежує видимість імен об'єктів. Видимість обмежується своїм рівнем. Об'єкт може прямо ( по імені) звертатися тільки до об'єктів, що входять у нього, що коштують на 1 рівень нижче в ієрархії.
Для того щоб звернутися до об'єкта іншого рівня, потрібно знати шлях уводити, увести до ладу нього. Причому шлях може вказуватися як абсолютно (із самого верхнього рівня ієрархії), так і відносно (з поточного рівня).
Шлях містить у собі об'єкти, через які потрібно "пройти" по дереву ієрархії, щоб добратися до потрібного нам об'єкта, перераховані через крапку. Крім того, існує кілька покажчиків (можна їх назвати "віртуальними об'єктами"), які часто дуже полезны:
this - покажчик на "самого себе" (т.е на поточний об'єкт). Буває потрібний, наприклад, коли потрібно передати у функцію покажчик на об'єкт, з якого ця функція викликається
_parent - покажчик на "батька". Указує на об'єкт вартий рівнем вище виерархии.
_root - "корінь". Це початок ієрархії. Без нього не обійтися при вказівці абсолютного шляху
Шлях виглядає так:
leaf.play(); - у подобъекта leaf (аркуш) викликається функція play();
_parent.tree.leaf.stop(); - мається на увазі, що на одному рівні є об'єкт tree, у якого є об'єкт leaf, у якого й викликається функція stop();
_root.banner._visible=false; - зробити кліп banner, що перебуває на 1-м рівні, невидимим
Рис. 3 - Ієрархія кліпів
Для ілюстрації поберемо ієрархію з 5тти об'єктів (мал. 3). Об'єкти 1-4 перебувають на 1-м шарі, об'єкт 5 - на 2-м шарі. Об'єкт 2 вкладено в об'єкт 1, а об'єкт 3 вкладено в об'єкт 2. Об'єкти на малюнку візуально вкладені друг у друга, але це в жодному разі не означає, що так повинне бути й " у житті". Тут вони так згруповані для наочності. Тому що ім'я об'єкта не може починатися із цифри, нехай об'єкти в нас називаються obj1-obj5.
Тепер займемося шляхами. Для початку подивимося, які об'єкти можуть звертатися друг до друга по імені. obj1 може звертатися до obj2, а obj2 - до obj3, але при цьому obj1 не може звернутися до obj3 прямо, тому що той утримується не в obj1, а в obj2.
Скажемо першому об'єкту потрібно, щоб об'єкт 3 почав заново відтворюватися з 1гго кадра. От як це робиться:
obj2.obj3.gotoandplay(1);
Щоб 4мму об'єкту зробити 1-й об'єкт (помітьте з усіма подобъектами!) напівпрозорим, йому потрібно у своєму сценарії написати наступне:
_parent.obj1._alpha=50;
або
_root.obj1._alpha=50;
Т.к. obj4 у нас перебуває на першому рівні ієрархії, то для нього _root і _parent - одне й те же.
Тепер для об'єкта 3 напишемо скрипт, який зробить об'єкт 5 невидимим при натисканні клавіші миші. У сценарії для об'єкта 3 пишемо:
У цьому фрагменті ми використовували абсолютний шлях. Якби ми використовували відносний, це виглядало б як:
_parent._parent._parent.obj5._visible=false;
Сподіваюся, я прояснив момент спутями.
Наведені вище приклади показали не тільки як виглядають шляху, але і як викликаються функції й привласнюються значення властивостям
Ви можете спробувати використовувати оброблювач onclipevent, задаючи різні умови й виконуючи різні дії з об'єктами при цьому
Одними з найважливіших є функції керування ходом відтворення кліпу (play(), stop(), gotoandplay(), gotoandstop()). Функції play() і stop() викликаються без параметрів, у той час як в goto потрібно вказувати кадра, і, можливо, сцену
Налагодження в Actionscript
Останнє, що ми розглядаємо в цій статті: вікна Output (висновок) і Debugger (отладчик) - інструменти, що служать для налагодження сценаріїв Actionscript.
Віконце Output прийшло з Flash 4, де воно було єдиним інструментом для налагодження. Існує директива trace(),
яка виводить повідомлення в це віконце. Туди ж виводяться повідомлення про помилки
Використовувати trace дуже просто:
trace (" 2808й кадри");
або, наприклад,
trace (xpos + k);
В 5-м Flash з'явився спеціальний інструмент - віконечко Debugger. Щоб ним користуватися потрібно перевіряти свої фільми не як звичайно (Test movie, Ctrl+Enter), а за допомогою Debug movie (Ctrl+Shift+Enter). Віконце Debugger (мал. 4) можна сховати/показати за допомогою Window->Debugger.
Рис. 4 - Вікно Debugger
В одній частині вікна Debugger перебуває ієрархічний список об'єктів, використовуваних у фільмі. Вибравши об'єкт, можна переглядати його властивості (закладка Properties).
Під закладкою Variables перебувають усі змінні. Перевага закладки Variables полягає в тому, що ви можете модифікувати значення будь-яких змінних "на лету" і відразу одержувати відбиття цієї зміни вфильме.
И, нарешті, можна додати будь-які змінні в список перегляду (Watch list) і спостерігати за їхніми значеннями (закладка Watch).
Debugger дозволяє відслідковувати практично будь-які параметри FlashиФільмів. Проте, я вважаю, що своє застосування є й у віконця Output і в Debugger-a.
От і все цього разу. Це - остання стаття із циклу. На щастя, зараз з'явилося багато матеріалів і руководств по основах Macromedia Flash 5. Просунуті аспекти Flash поступово переводяться/складаються російською мовою, і з'являються на наших сайтах. Наступні матеріали по Flash будуть присвячені "просунутим" аспектам Flash. Так само є ідея написання руководств по інших програмах, що роблять FlashфФільми ( зокрема тривимірні).
Удачі вам! У вас є чудовий засіб робити мережа (і не тільки мережа) гарніше! Користуйтеся ним, доставляючи задоволення відвідувачам ваших створінь і самим собі