- •Программирование на ActionScript.
- •Различия между ActionScript и JavaScript
- •Работа в редакторе скрипта
- •Особенности программирования кнопок
- •Создание Flash-презентации.
- •Задание 1.
- •Задание 2
- •Переменные
- •Задание 3
- •Идентификация объектов
- •Задание 4
- •Задание 5
- •Изменение свойств клипов.
- •Задание 6
Задание 3
Разберитесь в действиях скрипта и объясните результаты
x = "y";
a=”2”;
Eval(x) = "z";
b=1;
Eval(z) = "x";
c=a+Number(b);
d=Number(a+b)
Eval(y) = x;
a=Number(“b”)
b=b+d;
Variable _level0.x = "y"
Variable _level0.a = 1.#QNAN
Variable _level0.y = "z"
Variable _level0.b = 22
Variable _level0.c = "21"
Variable _level0.d = 21
Variable_level0.z= "y"
Надеюсь, теперь работа с переменными у Вас трудностей не вызывает. Главное – повнимательнее следите за кавычками, и почаще вызывайте список переменных после компиляции.
Осталась ещё одна «абстрактная» тема – взаимодействие объектов.
Идентификация объектов
Как уже было показано выше, экземпляры «MovieClip» занимают воFlashособое место, так как представляют собой, по сути, независимые ролики. Часто требуется их согласованные действия. Цель данного раздела – освоение идентификации роликов, что позволит им взаимодействовать.
Разработчики Flashввели в пятой версии новую методику идентификации – точечный синтаксис. Однако, для совместимости с предыдущими версиями был оставлен и старый слэш – синтаксис. Несмотря на то, что новый синтаксис удобнее нам придётся изучить оба так как и в старом синтаксисе написано немало красивых роликов. Кстати, многие примеры (Help-Samples) зачем-то тоже написаны в нём. Начнём со слэш – синтаксиса.
В единственном кадре нового ролика нарисуйте автобус и преобразуйте его в экземпляр «MovieClip» (F8). Активизируйте панель «Instance» и в поле «InstanceName» введите имя экземпляра, например «ikarus». Откомпилируйте ролик и нажмите комбинациюCtrlLили в меню «Debug» выберите команду «ListObjects». В окне «Output» появится список существующих объектов.
Level#0:Frame=1
MovieClip:Frame=1Target="_level0.ikarus"
Shape:
Ролик во время своей работы может запустить другой ролик, причём так, что они будут вместе исполняться в одном окне. Для того, что бы проигрыватель знал, какой ролик прорисовывать на переднем плане, были введены слои на уровне роликов. Эти слои имеют фиксированные имена _level0, _level1, … Ролик, расположенный на более высоком уровне отображается поверх остальных. В данном случае загружен только один ролик на уровень _level0. В первой строке нулевой уровень обозначен записьюLevel#0.
далее описан экземпляр клипа (_level0.ikarus), находящийся в ролике и содержащий простую графику (shape)
Вернитесь в редактор. Разместите внутри клипа «ikarus» экземпляр клипа «driver». Для этого сделайте на экземпляре «ikarus» двойной щелчой . Нарисуйте водителя (лучше сначала вне автобуса) и преобразуйте его в экземпляр (F8) «MovieClip». Дайте экземпляру имяdriver(панель «instance»). Вернитесь на основную сцену и создайте на ней экземпляр автомобиля с именем «bmw». Откомпилируйте ролик и выведите список объектов. Должно получиться
Lavel#0: Frame=1
Movie Clip: Frame=1 Target="_level0.ikarus"
Shape:
Movie Clip: Frame=1 Target="_level0.ikarus.driver"
Shape:
Movie Clip: Frame=1 Target="_level0.bmw"
Shape:
Из записи видно, что экземпляры «ikarus» и «bmw» лежат на основной сцене (в корне), а экземпляр «driver» принадлежит экземпляру «ikarus». Если бы мы не давали имена экземплярам вручную, они автоматически получили бы именаInstance1,Instance2,…
Теперь вернёмся к экспериментам с переменными
Войдите в диалог свойств кадра на основной линейке и создайте скрипт
x= 1
Перейдите в редактирование экземпляра ikarusи в кадре этого клипа создайте скрипт
x= 2
Возникает вопрос, а чему будет равен x?
Откомпилируйте ролик и выведите список переменных CtrlAltV
Level #0:
Variable _level0.$version = "WIN 5,0,30,0"
Variable _level0.x = 1
Movie Clip: Target="_level0.ikarus"
Variable_level0.ikarus.x= 2
Оказывается, переменные существуют в разных роликах и никак не взаимодействуют.
Строка _level0.x= 1 описывает переменную, созданную на основной линейке, а строка
_level0.ikarus.x= 2 – переменную в экземпляреikarus. Самостоятельно создайте переменныеx=3 в экземпляреdriverиx=4 в экземпляреbmw.
Необходимо научиться изменять переменные одного ролика из другого. Самым простым способом является указание полного пути к переменной. Предположим, необходимо с помощью скрипта, находящегося в кадре основной линейки, создать переменную в ролике driver, который, в свою очередь, находится в роликеikarus. В поле имени переменной необходимо указать путь к переменной, а потом через двоеточие - её имя
_level0/ikarus/driver:y= 5
Если все переменные находятся в одном ролике, т.е на уровне _level0, то имя уровня можно не указывать.
/ikarus/driver:y= 5
Тогда, что бы создать переменную на основной линейке из любого экземпляра, достаточно записать
/:y= 10
Поместите этот скрипт в кадр экземпляра driverи убедитесь в правильности утверждения.
Для указания пути к переменной можно использовать редактор целей, который вызывается кнопкойв нижней правой части окна редактора скрипта. Установив переключатели в нижней части окна в положение, как показано на рисунке, вы получаете возможность указать экземпляр мышкой и получить ссылку на него в поле «Target». После подтверждения кнопкой «ОК» ссылка на экземпляр окажется в редакторе. Справедливости ради, надо отметить, что данный диалог не очень то полезен, так как в сложном ролике экземпляры могут создаваться и исчезать во время проигрывания, так что, привыкайте лучше вводить ссылки вручную.
Другим способом указания переменной из другого ролика является использование относительной ссылки. Что бы лучше разобраться в относительных ссылках, вспомним славный фильм «Ирония судьбы или с лёгким паром». Помните адрес? Третья улица строителей дом 6 квартира 12. Абсолютной ссылкой в данном случае можно считать запись
Россия/Москва/Третья улица строителей/дом 6/квартира 12
Или, если предположить, что речь идёт лишь о нашей стране то
/Москва/Третья улица строителей/дом 6/квартира 12
Как видим, адрес указан однозначно. Однако, если вы в данный момент уже находитесь в Москве, то вас интересует лишь название улицы номер дома и квартиры.
Третья улица строителей/дом 6/квартира 12
Это и есть относительная ссылка. Обратите внимание на отсутствие слэш в начале. Это и означает, что отчёт ведётся от ткущего вашего положения. И если Вы окажетесь в каком либо городе, где так же найдётся Третья улица строителей дом 6 квартира 12 то эта ссылка также сработает, но укажет на совсем другое место.
Вернёмся к нашему примеру с автобусом. Пусть требуется скриптом, принадлежащим если кадру клипа «ikarus» создать в клипе «driver» переменнуюx=1. Использование абсолютной ссылки будет выглядеть так
/ikarus/driver:x=1;
«на сцене лежит клип «ikarus» в нём клип «driver» создай в нём переменную»
Но так как скрипт уже находится в клипе «ikarus» то достаточно записать
driver:x=1;
«в тебе находится клип «driver» создай в нём переменную »
Очень важно понимать разницу. Абсолютная ссылка сработает где бы не находилась. Относительная – лишь в в клипе «ikarus». Если её поместить в кадр клипа «bmw», то она будет проигнорирована, так как в клипе «bmw» нет клипа «driver». Если же его создать, то переменная возникнет именно в нём.
Относительная ссылка может указывать и на клипы, расположенные выше по иерархии.
В этом случае вообще никаких имён не требуется. Жильцы квартиры, указывая на свой дом, или свою улицу так и говорят «наш дом» «наша улица». В слэш синтаксисе такая запись будет выглядить как
../ на уровень выше
../../ на 2 уровня выше.
(сразу вспоминается команда DOScd..)
итак, если в клипе «driver» находится скрипт
../:x=1;
../../:y=2;
то переменная xвозникнет в клипе «ikarus», а переменнаяy– на основной линейке.
Относительная ссылка может быть и более сложной. Например такой скрипт
../../bmw:z=1
означает «поднимись на 2 уровня выше, найди там клип «bmw» и в нём создай переменную»