Клипы (тип movieclip)

Клипы — это основа Flash, самый важный и мощный элемент swf-фильма. Клипы и средства управления ими появились задолго до ActionScript, и код их реализации не так сильно изменился в последних версиях программы. С большой степенью достоверности можно утверждать, что во внутреннем представлении Flash-плейера между объектами и клипами не так много общего, хотя внешне они ведут себя достаточно схоже. Сложность понимания того места, которое занимают в ActionScript клипы, связана с тем, что использование стандарта ECMAScript в случае Flash достаточно искусственно; Web-скрипты, для реализации которых он предназначен, не работают ни с чем подобным. Дополнительную таинственность вносит и то, что код ActionScript располагается на кадрах клипов, показывая их особое привилегированное положение. Вообще клипы вносят в ActionScript столько особенностей, что практически полностью разрушают ту строгую структуру, которую предполагает ЕСМА-262. Так что критика ActionScript как достаточно запутанного языка имеет определенные основания.

Формально клипы являются такими же объектами данных, как, например, массивы или строки, но имеется и ряд существенных отличий.

• Новый клип нельзя создать, используя оператор new и конструктор класса.


Для этого нужно применить специальные методы класса MovieClip: attachMovie() («перетаскивает» экземпляр клипа из библиотеки) или createEmptyMovieClip() (создает пустой клип).

• Клип нельзя удалить при помощи оператора delete. Для этого существует метод removeMovie-Clip().

• У клипа есть собственное имя. Именем же объекта считается имя ссылающейся на него переменной. Это означает, что у объекта нет такого атрибута, как имя.

• Клип является по сути маленьким swf-фильмом. Доказательством этого является то, что любой фильм может быть подгружен в другой в качестве клипа (для этого существует метод load-Movie()), а также то, что _root принадлежит к типу movieclip.

Список отличий между клипами и объектами можно продолжать и продолжать. И большинство из них будет обусловлено одной причиной: особенностью выделения памяти для клипов и объектов:

• Объекты существуют в памяти до тех пор, пока на них имеются ссылки. В противном случае они автоматически удаляются как мусор. Клипы же «живут» до тех пор, пока они физически присутствуют на временной диаграмме. Удалить их можно, или уничтожив саму временную диаграмму, или же явно выгрузив их при помощи метода removeMovieClip().

• Ссылки на объекты являются прямыми указателями на сегмент памяти, который они (объекты) занимают.


При этом операция присвоения переменной, хранящей объект, другой переменной будет означать копирование ссылки на участок памяти, но не самого участка. Удалить объект, уничтожив переменную, которой он был присвоен при создании, невозможно: он будет существовать до тех пор, пока на него имеется хотя бы одна ссылка. Клип, в отличие от объектов, можно удалить даже при наличии ссылок на него. Ссылки на клип отличны от ссылок на объект: они указывают не на некую область в памяти, а на неконкретный элемент с конкретным именем. По этой причине, если вы удалите один клип и создадите другой, дав ему такой же идентификатор, все ссылки останутся рабочими, но указывать они будут уже на другой объект. Даже если вы создадите два клипа с одним именем, то оба они будут присутствовать в памяти (правда, один будет недоступен).Особенности ссылок на клипы являются причиной того, что они не могут быть удалены при помощи оператора delete (данный оператор уничтожает указатель, связывающий переменную и объект, однако наличие ссылок никак не сказывается на присутствии клипа).

Оператору typeof не всегда можно доверять при определении типа объекта. Например, кнопки ведут себя практически точно так же, как и клипы, однако их тип устанавливается как object, а не movieclip.


Аналогичная ситуация наблюдается в случае текстовых полей и, отчасти, звуков. Если считать признаками типа данных movieclip описанные выше особенности, то все они должны быть отнесены скорее к нему, чем к типу object.

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

Статьи из раздела Action Script на эту тему:
Кодировка символов. Уникод во Flash
Основные понятия
Синтаксис ActionScript
Тип undefined
Числа (тип number)