GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Ваш первый Flash-баннер(62561)
Программная анимация на Flash(20247)
Flash – это просто(14500)
Загрузка текста и переменных во Flash(12529)
Передача данных из Flash в серверные сценарии(10341)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Flash » _level0 против _root

_level0 против _root


Ростислав Сирык
rost@flash-ripper.com
http://www.flash-ripper.com/

"Объясните, есть ли разница между _level0  и _root,
и если есть, то какая?" (Часто задаваемый вопрос)

Чистота стиля: теория и практика

Определение _levelN
Глобальное свойство проигрывателя Flash Player для хранения ссылки на главную временную диаграмму .swf-документа, загруженного на уровень N проигрывателя. Синоним термина "мувиклип".

Определение _root:
Свойство .swf-документа, хранящее ссылку на его главную временную диаграмму.

Разница состоит в том, что ссылка _root уникальна, но только в рамках содержащего ее .swf-файла. А ссылка _levelN глобальна в пределах проигрывателя и может указывать на главные временные диаграммы (таймлайны) разных .swf-документов.

Рассмотрим распространенный случай, когда в проигрыватель загружен только один(!) документ, например пусть это будет "a.swf". В этом случае и _root, и _level0, используемые внутри этого документа, указывают на одно и то же место. Почему? Потому, что документ всегда загружается на первый свободный уровень проигрывателя; а в данном случае это нулевой уровень, так как на момент загрузки "a.swf" проигрыватель был пуст. Рассмотрим код в документе "a.swf":

_root.stop(); // Смысл: остановить движение на главном таймлайне .swf-документа, содержащего данную строку кода.
Этот документ — "a.swf"

_level0.stop(); // Смысл: остановить документ (клип), загруженный на нулевой уровень проигрывателя.
Этот клип — "a.swf"

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

Если клип "a.swf" будет загружен не на нулевой уровень проигрывателя, то выполнение первой строки кода в вышеприведенном примере даст результат, отличный от результата выполнения второй строки. Первая строка будет выполняться успешно, так как ссылка _root продолжает указывать на главный таймлайн содержащего ее документа "a.swf". Результат выполнения второй строки непредсказуем и зависит от содержания документа, загруженного на нулевой уровень проигрывателя. Такой код нельзя назвать переносимым.

И это — только начало разговора о мобильности кода. Следующая тема этого разговора — _root против _parent. Откажитесь и от _root, используйте только относительную адресацию.

Немного истории
Поддержка _levelN появилась в третьей версии проигрывателя, а _root — в пятой. В четвертой версии был заменитель _root в виде символа "/" (есть гурманы, употребляющие его до сих пор), но это быстро закончилось с появлением в Flash 5 точечной нотации путей, пришедшей на смену слэш-нотации.

C появлением Flash 3 появилась и возможность грузить разные .swf на разные _level, говорить им "stop" или "play", и т.д. — это был прорыв того времени. Первопроходцы Flash 3 использовали _levelN на все сто процентов, пока не произошел следующий революционный шаг вперед — возможность вкладывать в любой мувиклип .swf-документа до 16 000 слоев, на которые можно загружать другие .swf-документы, что до этого мог позволить себе только Flash Player. А теперь — любой мувиклип может содержать в себе множество слоев, на каждом из которых можно разместить множество мувиклипов, содержащих собственные множества слоев — до 16 000 уровней вложенности! И зачем ограничивать свой код использованием _levelN, если можно загружать все, что нужно, в свои клипы?

Вывод
Если в коде присутствует ссылка типа _level1, это указывает на недостаточную продуманность работы. Какой-то клип разработчику пришлось просто "впихнуть" на свободный уровень (_level1) поверх уже имеющихся, это следствие лени или неопытности. Вместо загрузки новых клипов на свободные уровни проигрывателя, спроектируйте для них место в своем документе, — и вы будете знать, что и где происходит с вашими клипами.

Чистота вашего стиля неотделима от ясности используемых методов.

Отказ от _levelN избавляет от путаницы, связанной с непониманием различий между _root и _level0, а это случается и с опытными флэшерами. Не всегда можно предсказать, в каком контексте будет употреблен однажды написанный вами код, и что произойдет в случае его переноса в другую иерархию.

 
07.03.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.