Опубликован: 04.11.2006 | Доступ: свободный | Студентов: 4621 / 581 | Оценка: 4.46 / 3.96 | Длительность: 39:17:00
Урок 3:

Адресация

< Урок 2 || Урок 3: 1234567 || Урок 4 >

Взаимозаменяемость способов адресации

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

Сплошные линии со стрелками представляют указание одного фильма на другой. Пунктирные линии указывают на дочерние фильмы.

Создание глобальных элементов и ссылка на них

Нет сомнения, что, даже имея ясное представление о способах адресации, порой бывает трудно уследить за всеми элементами – особенно когда монтажные столы многократно вложены друг в друга, вроде матрешек. Проявите немного воображения, и вы поймете, что пути при этом могут оказаться слишком длинными и неудобными. Чтобы упростить дело, в 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

Стоит помнить еще и о том, что глобальные элементы постоянно находятся в памяти, и освободить ее можно, только удалив глобальный элемент. Таким образом, использование в фильме многочисленных глобальных элементов может привести к неэффективному использованию памяти.

< Урок 2 || Урок 3: 1234567 || Урок 4 >
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт: