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