Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Вторник, 23.12.2025, 06:43
Главная » Статьи » Уроки ActionScript

7-2. Осмысление иерархии наследования класса
Если вы посмотрите документацию по классу наподобие MovieClip (flash.display.MovieClip), вы можете увидеть, что там присутствует не так уж и много определений, относящихся сугубо к классу MovieClip. Существует всего 9 свойств и 10 методов. Вы не увидите определений для таких свойств как name, x, y, и т. д., пока не нажмете на ссылку "Show Inherited Public Properties/Methods" (Показать общие наследуемые свойства/методы) вверху этих списков (эти ссылки появляются в виде "Hide Inherited Public Properties/Methods" (Скрыть общие наследуемые свойства/методы), если определения уже выведены на экран), так как эти свойства не являются уникальными для класса MovieClip. Конечно, класс MovieClip обладает этими свойствами, но эти свойства на самом деле определены внутри другого класса, а MovieClip наследует их, чтобы использовать их в качестве своих собственных.

Так как многие классы пользуются одними и теми же свойствами и методами и используют их одинаково (например, MovieClip, Sprite и Shape, каждый имеет свойства x и y и использует их одинаково), то для уменьшения избыточности можно определять одинаковые элементы классов в одном месте (классе), а затем классы будут ссылаться на эти определения для собственного использования.  Это поддерживается через механизм, известный как наследование класса. Один базовый класс (a.k.a. superclass) имеет определения, которые могут извлекаться классами (a.k.a. subclasses) и использоваться ими в качестве собственных до тех пор, пока они занимаются тем, что называется расширением этого класса.

Это концепция объектно-ориентированного программирования, и хотя вы, может быть, не работаете конкретно с OOP, самостоятельно программируя ActionScript, она, в частности, помогает понять язык, потому что документация построена так, чтобы отражать эту ассоциацию. Документация является чем-то таким, отчего вы должны быть чрезвычайно зависимы, особенно при первом знакомстве с ActionScript (или каким-либо другим языком, что не имеет значения).

Вернувшись назад к верхней части страницы документации по классу MovieClip, вы можете увидеть ветвь, представляющую расположение MovieClip внутри его иерархии наследования. Для MovieClip она выглядит так:

MovieClip > Sprite > DisplayObjectContainer > InteractiveObject > DisplayObject > EventDispatcher > Object

Здесь показано, что класс MovieClip является наследником класса Sprite и имеет все свойства и методы, которыми обладает класс Sprite, который сам имеет все свойства и методы, которыми обладает DisplayObjectContainer... И так далее, пока не будет достигнут базовый класс Object – класс, наследниками которого являются все классы в ActionScript. Эта ветвь просто показывает, насколько клипы и спрайты похожи. Практически, они являются одним и тем же, за исключением дополнительных свойств, относящихся к кадрам, и методов, которые определены только для MovieClip. Точно так же все другие объекты, которые видны на экране,  будут наследниками класса DisplayObject. И вы знаете, все свойства, определенные внутри класса  DisplayObject, будут находиться внутри любого экземпляра объекта отображения, который может быть сделан видимым на экране. Поэтому, не удивляйтесь, когда, щелкнув по ссылке x, чтобы просмотреть документацию по свойству x, вы попадете на страницу документации класса DisplayObject. В сущности, они – одно и то же.

Примечание: Классовая иерархия и типизирование
Типы, которые представляют классы внутри классовой иерархии MovieClip, а также сам факт того, что существует много классов в иерархии (в ActionScript 2, MovieClip был наследником только класса Object), будут важны позже, по мере их обсуждения. А сейчас поймите, что экземпляру может быть присвоен тип его собственного класса, или любого другого класса, наследником которого он является. Классу MovieClip, например, безошибочно можно присвоить тип DisplayObject.

Пример: обращение к клипам на временной шкале

В данном примере вы создадите некоторые объекты отображения на основной временной шкале, и будете использовать ActionScript для изменения их свойств.

1. Создайте новый ActionScript 3 документ во Flash CS3.

The Display List (Таблица отображения)

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

Рисунок: Пример таблицы отображения, начинающейся с экземпляра stage

Обычно при обращении к таблице отображения, вы обращаетесь к полной таблице отображения внутри флеш плеера. Иногда ее также называют активной таблицей отображения. Однако, вы также можете увидеть промежуточную таблицу отображения, используемую с отдельными контейнерами объектов отображения – объекты отображения типа DisplayObjectContainer (flash.display.DisplayObjectContainer), которые могут содержать другие объекты отображения (например, экземпляры Sprite и MovieClip), где каждый контейнер имеет собственную таблицу отображения. Таблица отображения любого контейнера состоит из всех потомков объектов отображения контейнера и их потомков.

В AVM1 (виртуальная машина 1) с ActionScript 2 экземпляр клипа не мог существовать без привязки к некоторой временной шкале, и фактически не являясь частью таблицы отображения SWF файла. AVM2 (виртуальная машина 2) и ActionScript 3 изменили это. Теперь объекты отображения имеют возможность существовать в памяти без привязки к какой-либо временной шкале, и, следовательно, без присутствия на экране. В данном случае эти экземпляры рассматриваются за пределами таблицы, так как не находятся внутри активной таблицы отображения, и могут быть доступны посредством ActionScript.

Также в ActionScript 3 по-другому реализована обработка размещения, или глубины. Раньше все клипы могли размещаться в пределах любой глубины, где клипы реальной временной шкалы первоначально присутствовали на отрицательных глубинах. Сейчас все глубины начинаются с 0 и являются смежными. Другими словами, если у вас имеются два объекта отображения в контейнере, то им придется существовать на глубинах 0 и 1. Не может быть такого, чтобы один объект находился на глубине 0, а другой на глубине 10, оставляя пустыми 9 глубин. В конечном счете, это может означать меньшую гибкость, но в то же время существует более лаконичное понимание размещения объектов отображения внутри таблицы отображения, если вы знаете, что в вашем контейнере объектов отображения существует 5 объектов, то вы знаете точно, на какой глубине находится каждый объект.

Рисунок: Глубины в ActionScript 3 являются смежными и не могут быть отрицательными
Категория: Уроки ActionScript | Добавил: anti_k (25.02.2010)
Просмотров: 1210 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]