Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Action Script.doc
Скачиваний:
18
Добавлен:
07.02.2015
Размер:
4.39 Mб
Скачать
        1. Задание 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» и в нём создай переменную»