Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2868 / 253 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 3:

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

Вертикальный порядок (z-order) - выжимка

Давайте кратко суммируем все данные, касающиеся z-порядка, которые мы упоминали в настоящей главе. Самая главная ступень иерархии z-порядка - уровни, на которые подгружаются внешние ролики. Если клип А находится в ролике, подгруженном на уровень n, а клип B - в ролике, подгруженном на уровень m, и при этом n > m, то клип A непременно будет показываться поверх клипа B, независимо от любых других деталей, касающихся z-порядка. Если же m = n (то есть клипы находятся в одном и том же ролике - два разных ролика не могут быть подгружены на один уровень, вновь загружаемый ролик неминуемо выгружает с уровня назначения то, что там было раньше), то надо рассматривать, внутри какого клипа находятся A и В. Если внутри разных и при этом владелец А лежит выше владельца B, то и А всегда будет перекрывать В. Если же А и В лежат в одном клипе, то нужно посмотреть на уровень (глубину) подгрузки, если речь идет о динамически созданных клипах, или же на расположение слоев, если речь идет об экземплярах, созданных в редакторе Флэш. Как мы уже говорили, большим значениям уровня соответствуют выше расположенные клипы (так что, хотя уровень этот и назван depth, это не совсем "глубина"). У клипов, созданных статически, номер уровня отрицателен. (Здесь и далее мы считаем, что клипы, созданные статически и динамически мы не меняли местами при помощи swapDepths.) Если А и В - оба динамические клипы, то нам известны номера уровней, на которые мы их подгружали, так что если номер уровня у А больше, то он лежит выше. Если А - динамический клип, а В - статический, то А лежит выше. Если А и В - оба статические, но расположены в разных слоях, то А лежит выше, если он помещен в слой, находящийся выше слоя В. Наконец, если А и В лежат в одном слое, то они расположены в том порядке, в котором их установили при помощи команд главного меню, расположенных в разделе Modify / Arrange. А если эти команды не применялись, то выше будет расположен тот клип, чей экземпляр создан в редакторе позже.

Кстати, если мы пытаемся определить z-порядок во время выполнения (а не заранее при создании клипа ), то даже для статически созданных клипов можно просто вызвать getDepth (мы получим отрицательную величину) и использовать тот же алгоритм определения z-порядка, что и для клипов, созданных динамически.

И еще раз напомним: не путайте уровни роликов и уровни клипов. Уровни загрузки внешних роликов, как мы видели только что, гораздо "старше".

Наконец, обсудим следующий вопрос: совпадает ли z-порядок с порядком выполнения кода, расположенного в синхронно показываемых кадрах различных объектов? И да, и нет. Если речь идет о коде, расположенном в различных клипах, то тогда да: код выполняется согласно z-порядку (в направлении снизу вверх). При этом код, размещенный в клипе -владельце, всегда выполняется раньше, чем код в тех экземплярах клипов, которыми он владеет. Однако есть еще возможность разместить код так, что место его расположения не будет однозначно привязано к z-порядку какого-либо изображения. Мы имеем в виду код, располагаемый в одном и том же клипе, в одном и том же его кадре, но в разных слоях. При этом код относится вовсе не к слою, а к клипу целиком, так что ни на что, кроме порядка выполнения, помещение кода в какой-либо слой не влияет. Так вот, код, расположенный в верхних слоях выполняется раньше, чем код, расположенный в нижних, - на первый взгляд, в порядке, обратном z-порядку ; но еще раз повторим, что код из любого слоя относится к клипу целиком и, следовательно, к z-порядку отношения не имеет вовсе. Как бы то ни было, во избежание путаницы советуем размещать код всегда в самом верхнем слое (его можно специально освободить от всякой графики и назвать, например, Program Code ).