- •Программирование на ActionScript.
- •Различия между ActionScript и JavaScript
- •Работа в редакторе скрипта
- •Особенности программирования кнопок
- •Создание Flash-презентации.
- •Задание 1.
- •Задание 2
- •Переменные
- •Задание 3
- •Идентификация объектов
- •Задание 4
- •Задание 5
- •Изменение свойств клипов.
- •Задание 6
Задание 4
Создайте на сцене ещё один клип с именем «house». Присвойте кадру этого клипа скрипт, который на сцене, и в клипах «ikarus» «driver» «house» создаст по 2 переменные. Используйте для создания одной переменной абсолютную, а для создания другой – относительные ссылки.
Иногда возникает необходимость, что бы один клип обращается к другому несколько раз подряд, например создал сразу три переменных. Что бы не писать для каждой переменной ссылку на клип, предусмотрен оператор
«TellTarget(“ссылка на клип к которому идёт обращение”) {
Скрипт обращения к клипу
}».
Ссылка на клип в аргументе оператора может быть как абсолютной так и относительной. Только не забудьте взять её в кавчки, иначе компилятор решит что это имя переменной, содержащей в себе нужную ссылку. Рассмотрим пример. Пусть скрипт, принадлежащий кадру основной линейки создаст в клипе «ikarus» три переменныеx1,x2 иx3. В стандартной записи, например с использованием относительной ссылки скрипт будет выглядить так
ikarus:x1=1;
ikarus:x2=1;
ikarus:x3=1;
Если использовать «Telltarget» то
Telltarget ("ikarus"){
x1=1;
x2=1;
x3=1;
}
Обратите внимание, что хотя переменные и создаются в другом клипе, пути к ним не указываются, как будто часть скрипта с присвоением переменных находится в клипе к которому направлено обращение.
Осталось рассмотреть один «подводный камешек». Пусть, например, необходимо переменной «b», хранящейся в клипе «bmw» присвоить значение переменной «a», хранящейся в клипе «ikarus».Для начала, создайте в клипе «ikarus» переменную «a». Перейдите в редактирование клипа «bmw» и создайте в нём скрипт
b= /ikarus:a
В данном случае ссылку на переменную bписать не надо, так как она возникает в клипе, которому принадлежит данный скрипт. Убедитесь в том, что переменнаяbдействительно получила значение переменнойa. Ту же самую процедуру можно реализовать при помощи оператора «TellTarget».
Telltarget ("/ikarus"){
/bmw:b = a
}
Отличие состоит в том, что в момент присваивания переменной мы, по сути, находимся уже внутри клипа «ikarus» где переменная «a» является «местной» и не требует указания пути, а переменная «b» является внешней. Если просто записатьb=aто переменная возникнет в клипе «ikarus», так как указание шло именно ему.
Оператор «TellTarget» может быть использован не только для присвоения переменных, но и для других команд, обращающихся к другому клипу, например, команд «Stop()» или «Play()».
Telltarget("/ikarus"){
Play();
}
Отмечу, что данную конструкцию редко встретишь в современных роликах, однако представление о ней конечно иметь нужно. Тем более лёгким и изящным покажется Вам точечный синтаксис.
Перед тем как углубиться в тонкости точечного синтаксиса, познакомимся с базовыми понятиями объектно-ориентированного программирования. Только не пугайтесь, пока ничего объектного программировать не будем. Просто дело в том, что точечный синтаксис как раз построен на этой идеологии, и потому, программисты с опытом ООП чувствуют себя в точечном синтаксисе как рыбы в воде. Нам лишь пока необходимо понимать что объект есть хранилище информации. Информация представляет собой как обычные данные (свойства) так и инструкции (методы). Ну, например, если считать объектом нашу группу Flash, то её свойствами будут – количество учащихся, номер текущего занятия, а методами – добавление нового ученика или выдача дипломов. В точечном синтаксисе это можно записать так
Группа_Flash.Количество_учащихся
Группа_Flash.Номер_текущего_занятия
Группа_Flash. Добавление нового ученика
Группа_Flash. Выдача дипломов
Если перенести эту идеологию на идентификацию, то клипы можно считать объектами, переменные, им принадлежащими – свойствами, ну, а команды скрипта Stop(),Play() – методами. И записывать так
ikarus.x=1;
ikarus.driver.y=2;
bmw.Play();
Как стало проще! Осталось лишь разобраться с относительными и абсолютными ссылками в точечном синтаксисе.
Основная линейка в точечном синтаксисе называется _root. Если требуется абсолютной ссылкой создать на основной линейке переменную, то необходимо записать
_root.x=1;
Таким образом, любая абсолютная ссылка в точечном синтаксисе начинается с _root, например,
_root.ikarus.driver.y=5;
Относительная ссылка создаётся как и в слэш синтаксисе.
Ikarus.x=1;
Ikarus.driver.y=2;
Для ссылки на уровень выше необходимо использовать _parent.
_parent.x=1;
Итак, подводим небольшой итог. В таблице представлены примеры создания переменной xразными методами.
Тип ссылки |
Слэш синткасис |
Точечный синтаксис |
Абсолютная |
/ikarus:x=1 |
_root.ikarus.x=1 |
Относительная ниже |
ikarus:x=1 |
ikarus.x=1 |
Относительная выше |
../:x=1 |
_parent.x=1 |
Развивая тему объектного подхода к экземплярам клипов, отметим, что не только переменные, принадлежащие клипу можно рассматривать как их свойства. У каждого экземпляра имеется набор предопределённых свойств, список которых можно получить, развернув в редакторе скрипта группу «Properties». Названия свойств начинаются с символа «_» и выделяются в редакторе зелёным цветом.
Вот некотрые из них
_x _y – координаты экземпляра
_xscale _yscale – масштаб по горизонтали и вертикали
_height _width – высота и ширина
_alpha – прозрачность,
_rotation – поворот,
_visible – видимость.
_name – Instance Name
Доступ к свойствам осуществляется так же как и доступ к переменным. При этом, возможно использование как точечного так и слэш синтаксиса. Например, для изменения прозрачности экземпляра клипа достаточно записать
ikarus._alpha=50
или
ikarus:_alpha=50
(в данном случае приведены относительные ссылки к клипу ikarus)
Очевидно, что такой простой доступ к свойствам экземпляров открывает широчайшие возможности для создания программной анимации.
Настал черёд познакомиться ещё с одной конструкцией – «with». Её использование выглядит так
with(bmw) {
Stop();
}
В данном применении конструкция работает как аналог tellTarget. Однако, не всё так просто. Пусть теперь необходимо создать в клипеbmwдве переменныеx1 иx2. С использованиемtellTargetскрипт запишется как
tellTarget("bmw") {
x1=1;
x2=1;
}
Запишем теперь скрипт, используя with
with(bmw) {
x1=1;
x2=1;
}
Однако, посмотрев список переменных можно убедится, что в последнем случае они возникли не в клипе bmw, а на основной линейке. Те конструкция не сработала!
Команда withпредназначена для получения доступа к свойствам объектов. Переменные, хотя и записываются в точечном синтаксисе как свойства, по сути, таковыми не являются!
Предопределённые свойства клипа withизменит вполне успешно. Таким образом обе нижеприведённые конструкции работают.
with (bmw) {
_x = 50;
_y = 100;
Stop();
}
tellTarget (“bmw”) {
_x = 50;
_y = 100;
Stop(3);
}
В обычной форме пришлось бы записать
bmw._x = 50;
bmw._y = 100;
bmw.Stop();
Достоинством команды withсостоит в том что её аргументом может являться не только ссылка на экземпляр клипа но и на другие объектыFlash5. Пусть, например, необходимо провести ряд математических вычислений с использованием методов объектаMath.
Обычная запись будет выглядеть как
a=Math.PI*r*r
x = r * Math.cos(Math.PI)
y = r * Math.sin(Math.PI/2)
Использование withсущественно сократит скрипт.
with (Math) {
a = PI * r * r
x = r * cos(PI)
y = r * sin(PI/2)
}
Возможно использование вложенных команд with для доступа к информации во вложенных друг в друга объектах. В следующем примере экземпляры «driver» и «passenger» содержатся в клипе «ikarus» . Оператор устанавливает значения _alpha для «driver» и «passenger» без изменения значения _alpha у «ikarus».
with (ikarus){
with (driver){
_alpha = 20;
}
with (passenger){
_alpha= 40;
}
}
Кавычки в аргументе withобычно не ставят, но если случайно поставить, то всё равно работает.