Дострочное пересдача экзамена
|
Адресация
Взаимозаменяемость способов адресации
В этом уроке вы узнали, что на один и тот же монтажный стол можно указать разными способами, причем это зависит от его отношения к тому монтажному столу, который на него указывает (не говоря уже о том, что вы от него хотите). Следующая схема демонстрирует различные взаимозаменяемые способы указания путей при обращении одного фильма к другому.
Сплошные линии со стрелками представляют указание одного фильма на другой. Пунктирные линии указывают на дочерние фильмы.
Создание глобальных элементов и ссылка на них
Нет сомнения, что, даже имея ясное представление о способах адресации, порой бывает трудно уследить за всеми элементами – особенно когда монтажные столы многократно вложены друг в друга, вроде матрешек. Проявите немного воображения, и вы поймете, что пути при этом могут оказаться слишком длинными и неудобными. Чтобы упростить дело, в ActionScript предусмотрены глобальные объекты. Эти особые элементы Flash не принадлежат конкретному монтажному столу, но они полностью доступны для вашего проекта: на них можно сослаться с любого монтажного стола без указания пути, тем самым получив доступ ко всем возможностям, которыми они располагают (переменным, функциям, другим динамическим элементам).
Сначала мы расскажем, как создать глобальный элемент, а затем – как обычный элемент (то есть находящийся на монтажном столе) преобразовать в глобальный.
Процесс создания глобального элемента, например, переменной, очень прост и выглядит так:
_global.myVariable = "hello";
Поскольку эта переменная является глобальным объектом, к ней можно обратиться с любого монтажного стола просто по имени, не указывая путь:
_root.myMovieClip.favoriteGreeting = myVariable;
или
_root.favoriteGreeting = myVariable;
Также можно объявить глобальную функцию (см. Урок 5 – Применение функций), используя глобальный идентификатор:
_global.myFunction = function(){ // действия... }
Теперь эту функцию можно вызвать с любого монтажного стола, просто указав ее имя:
myFunction();
То же справедливо и при создании экземпляров объектов (см. Урок 4 – Объекты и их использование):
_global.myDateObject = new Date();
Выше мы упомянули, что обычный элемент, который находится на монтажном столе (например, экземпляр фильма-символа), можно преобразовать в глобальный (к которому не надо указывать путь). Предположим, например, что в нашем проекте имеется экземпляр фильма-символа, расположенный "по адресу" _root.car.engine.piston. Если мы захотим упростить доступ к этому экземпляру, то можем дать ему глобальный адрес:
_global.myPiston = _root.car.engine.piston;
Теперь этим элементом можно управлять с любого монтажного стола, просто указав его глобальное имя:
myPiston.play();
Есть ли преимущества в использовании глобальных элементов вместо обычных? В принципе, все зависит от ваших предпочтений и нужд конкретного проекта. А вообще, всякий элемент, который часто используется разными монтажными столами – хороший кандидат в глобальные элементы.
Следует только помнить, что при использовании глобальных элементов может возникнуть конфликтная ситуация с именами – если у элемента монтажного стола (например, переменной) окажется такое же имя, как у глобального элемента. Предположим, у нас имеется экземпляр фильма-символа, а в нем – переменная с именем myVariable; предположим также, что существует глобальная переменная с таким же именем. Если мы обратимся к первой переменной (находящейся в фильме-символе), указав абсолютный путь, то проблем не возникнет:
_root.myMovieClip.myVariable
Однако проблема появится, когда myMovieClip обратится к глобальной переменной с именем myVariable:
myVariable
Дело в том, что этот монтажный стол (фильм-символ) имеет собственную, локальную переменную с именем myVariable. Если использовать такой синтаксис (без указания пути), Flash не сможет понять, к какой переменной происходит обращение, к локальной или глобальной. Конфликт будет разрешен автоматически – Flash обратится к той переменной, которая ближе к данному монтажному столу, то есть к локальной.
Простейший способ избежать таких конфликтов – начинать имена всех глобальных элементов с буквы g:
gMyVariable gFavoriteColor
Стоит помнить еще и о том, что глобальные элементы постоянно находятся в памяти, и освободить ее можно, только удалив глобальный элемент. Таким образом, использование в фильме многочисленных глобальных элементов может привести к неэффективному использованию памяти.