Опубликован: 23.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский физико-технический институт
Лекция 3:

Клипы и ролики. Специальные возможности языка

Аннотация: Обращение к переменной клипа по имени, записанному в виде строки. Способы обращения к полям объектов различной степени вложенности. Способы создания новых полей, в том числе по имени, записанному в строке. Иерархия клипов: отношение владения для клипов и объектов. Вертикальный порядок клипов. Порядок следования кадров и способы управления им. Работа со сценами. Подгрузка в текущий флэш-ролик других роликов. Предопределенные идентификаторы _root и _global. Семейство предопределенных идентификаторов _level. Свойства клипа и их изменение. Простейшие программные способы создания новых клипов: дублирование существующих клипов и создание пустых. Программная генерация текстовых полей. События, реакция и подписка на них. Пользование инструкциями with, в том числе многоуровневыми. Области видимости и их старшинство. Свойства (properties) и слежение за переменными.

В этой лекции мы познакомимся со способами создания клипов. Клип - это, в простейшем случае, специальный объект, содержащий анимацию, которую можно проиграть. Создаются такие клипы с помощью среды Flash MX. В более сложном случае клипы могут содержать в себе другие клипы, а также могут быть созданы программно. Следует отличать клипы от флэш-роликов, под которыми мы будем понимать готовый анимационный "фильм", возможно, состоящий из многих клипов, и откомпилированный в файл *.swf. Оказывается, существует возможность такой ролик загрузить прямо внутрь вашего ролика и проиграть его там. В этой лекции мы научимся создавать простейшие клипы и подгружать ролики, а также начнем изучать специальные средства языка ActionScript, предназначенные для работы с клипами. Также мы изучим некоторые особенности ActionScript, связанные с тем, что он является интерпретируемым языком.

Доступ к переменной или клипу по имени. Операторы eval и set

Хотя программы, транслируемые интерпретатором, как правило, проигрывают откомпилированным программам в скорости, они имеют и ряд преимуществ. В частности, иногда очень удобно в момент трансляции иметь информацию времени выполнения. Часто это помогает при взаимодействии с внешними по отношению к ActionScript объектами Флэш (такими, как экземпляры клипов ). И более того, в следующих лекциях мы увидим нечто похожее на указатели на функции и множественное наследование - то, чего многим не хватает в языке Java.

В первую очередь, информация времени выполнения позволяет нам обратиться по имени (которое неизвестно на момент компиляции) к какому-либо объекту (это может быть экземпляр клипа, созданный "руками", а может быть и переменная ).

Обращение к переменной

Документированный способ

Чтобы обратиться к переменной, имя которой является значением выражения типа String, можно воспользоваться оператором eval . Синтаксис обращения к этому оператору совпадает с синтаксисом вызова функции с одним аргументом (более того, в References вы найдете eval в разделе встроенных функций, хотя по смыслу производимых действий это, конечно же, оператор). Итак, запись

a1 = 10;
i = 0;
trace(eval("a1"));
trace(eval("a" + ++i));

дважды выводит в консоль десятку. Отсюда видно, что в качестве аргумента eval можно использовать любое выражение: оно будет интерпретировано как строка, и eval выдаст значение переменной с соответствующим именем. Если такой переменной нет, то будет возвращено, разумеется, undefined.

Недокументированный, но удобный способ

Тех же самых результатов мы могли добиться и с помощью следующего кода:

a1 = 10;
i = 0;
trace(this["a1"]);
trace(this["a" + ++i]);

То есть доступиться к полю b объекта а можно при помощи конструкции a["b"]. Это очень напоминает работу с массивом; об этой аналогии мы подробнее поговорим в главе, посвященной контейнерам. А пока укажем на то, что данная возможность, вообще-то, является недокументированной. Обычно недокументированными возможностями следует пользоваться с осторожностью - в следующих версиях продукта они могут бесследно исчезнуть. Впрочем, описанное только что использование квадратных скобок настолько удобно и широко распространено, что вряд ли им в будущем что-либо грозит. (Например, во Flash MX 2004 они тоже работают.)

Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008
Akiyev Begench
Akiyev Begench
Беларусь, Полоцк, полоцкий государственный университет