Имена экземпляров клипов

Наличие собственного имени — это одна из наиболее важных особенностей, отличающих экземпляры клипов от объектов. Так, у объекта в принципе не может быть имени. Упрощая, именем объекта мы считали имя ссылающейся на него переменной. Если создать объект и не сохранить его в переменной, то в дальнейшем к нему просто нельзя будет обратиться, Да и просуществует он в памяти недолго — алгоритм чистки мусора, не обнаружив ссылок на объект, просто удалит его.

var obj:Object=new Object(); // Так создается объект с именем obj

Совсем иначе обстоит дело с экземплярами клипов. Они имеют собственные имена, поэтому, чтобы существовала возможность доступа к клипу, ему совсем необязательно ставить в соответствие переменную или свойство. Впрочем, эта операция также возможна и очень часто проводится на практике (например, иногда группу однотипных клипов удобно сохранять r массиве).

Задаются имена экземпляров клипов при их создании. Если экземпляр перетаскивается из библиотеки вручную, то имя прописывается в поле инспектора свойств. При программном создании экземпляров задания строки с именем требуют наличия методов duplicateMovieСlip(), attachMovie() и createEmptyMovieClip().

Если для созданного вручную экземпляра не было задано имени, оно присваивается автоматически, Имена для анонимных клипов (равно как и кнопок или текстовых полей) задаются однотипными: instance 1, instance 2, ...


instancen. Порядок, в котором именуются анонимные экземпляры, определяется занимаемыми ими глубинами. Чем на более низком виртуальном слое располагается клип, тем меньше значение n в его имени.

Автоматическое присваивание имен напрямую на практике никак не используется. Однако оно исключительно полезно, так как благодаря ему можно получить доступ ко всем экземплярам, вне зависимости от того, были они явно именованы или же нет.

При желании имя экземпляра клипа можно прочитать и даже изменить. Для этого нужно обратиться к его свойству name:

// Создаем пустой клип с именем clip
var per:MovieClip = createEmptyMovieClip("clip", 0);
trace(per._name); // Выводит: clip
per._name = "new_clip"; // Пробуем переименовать экземпляр
trace(per._name); // Выводит: new_clip

Надо признать, что переименование экземпляров — задача из разряда экзотических. А вот чтение свойства name приходится проводить достаточно часто. В общем случае это позволяет осуществлять некоторую операцию лишь над избранными клипами, а не над всеми, которые потенциально могут активизировать выполняющий ее механизм.

Правила для имен клипов совпадают с общими принципами задания идентификаторов, описанных ранее.


Так, эти имена не могут начинаться с числа, они чувствительны к регистру, в них не могут входить символы операторов и т. д. Точнее, именем клипа может быть совершенно любая строка.

Но чтобы использовать его как идентификатор, все ограничения должны быть соблюдены. К клипам, имеющим «неправильные» имена, можно обращаться, используя оператор доступа к свойствам по строковым ключам или же через ссылающиеся на них переменные:

// Создаем клип с "неправильным" именем
var per:MovieClip = createEmptyMovieClip("2+/*3", 0);
trace(per); // Выболит: _level0.2+/*3
trace(this["2+/*3"]._name); // Выводит: 2+/*3

На одной временной диаграмме у каждого экземпляра должно быть уникальное имя. Однако если у двух клипов имена совпадут, то это не значит, что один из них исчезнет. Нет, он будет попрежнему присутствовать на временной диаграмме. Просто он станет недоступным для кода ActionScript. Если же второй клип выгрузить, то к данному экземпляру можно будет обращаться как ни в чем не бывало.

Более опасной является ситуация, когда совпадают имя клипа и идентификатор объекта кода ActionScript, Так как свойствами временной диаграммы являются как переменные и функции расположенного на ее кадрах сценария, так и размешенные на ней экземпляры клипов и кнопок, текстовые поля и звуки, то совпадение любых двух идентификаторов будет означать, что один из элементов станет недоступным.


Поэтому нужно следить, чтобы создаваемый идентификатор был уникальным и рамках всех свойств временной диаграммы.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Виртуальные слои клипов
Задание формулы цвета
Импорт внешних фильмов и изображений
Клипы как носители кода
Коллизии клипов. Метод hitTest()

Вернуться в раздел: Action Script / 10. Клипы