Руководство по actionscript. часть 6, стр. 078

? Сцена основной временной шкалы не содержит компонентов с настраиваемыми параметрами, значения которых изменяются от кадра к кадру.

? Сцена основной временной шкалы не содержит компонентов с настраиваемыми параметрами доступности или значений с палитры Strings (Строки).

В противном случае автоматически устанавливаемым классом документа будет автоматически генерируемый подкласс класса MovieClip.

Любой сценарий кадра основной временной шкалы можно считать далеким аналогом метода экземпляра класса документа. Код сценария кадра основной временной шкалы выполняется в своей собственной области действия и использует такой же набор правил доступа, который применяется к методам экземпляра класса документа. Иными словами, сценарий кадра основной временной шкалы может обратиться к любому определению (переменная, метод, класс, интерфейс или пространство имен), доступному из любого метода экземпляра класса документа. Подобным образом сценарий кадра основной временной шкалы может использовать ключевое слово this, чтобы обратиться к текущему объекту (то есть к экземпляру класса документа).

Для примера создадим класс документа RunningMan для файла runningman. fla из предыдущего раздела. Поскольку основная временная шкала файла runningman. fla включает сценарий кадра, класс RunningMan должен наследоваться от класса MovieClip. В классе RunningMan мы определим простой метод для открытия URL-адреса в браузере.

package { import flash. display. MovieClip; import flash. net.*;

public class RunningMan extends MovieClip { public function goToSite (url:String):void { var request.-URLRequest = new URLRequest(url); navigateToURLCrequest. «_blank»);

}

}

}

Чтобы присоединить класс RunningMan к нашей анимации с бегущим человечком, мы сохраняем исходный файл этого класса в той же папке, где находится файл runningman. fla, а затем выполняем следующие шаги.

Руководство по actionscript. часть 6, стр. 079

1. Выбираем команду меню File > Publish Settings (Файл > Настройки публикации) и нажимаем кнопку Settings (Параметры), расположенную возле параметра ActionScript version (Версия ActionScript) с установленным значением ActionScript 3.0 на вкладке Flash.

2. В поле Document class (Класс документа) вводим значение RunningMan (обратите внимание: RunningMan, а не RunningMan. as).

3. В окне ActionScript 3.0 Settings (Параметры ActionScript 3.0) нажимаем кнопку ОК.

4. В окне Publish Settings (Настройки публикации) нажимаем кнопку ОК.

Теперь, когда в качестве класса документа для файла runningman. fla установлен класс RunningMan, мы можем обновить сценарий для кадра 9 из предыдущего раздела. Предыдущий код сценария кадра выглядел так:

import flash. net.*;

var request:URLRequest = new URLRequest(«http://moock. org»); navi gateToURL(request, «_blank»); stop( );

Следующий код демонстрирует новый сценарий для кадра 9. Стоит отметить, что в этом сценарии происходит непосредственное обращение к методу экземпляра goToSite ( ) класса RunningMan.

goToSiteC»http://moock. org»); stop( );

В предыдущем коде выражение stop ( ) ссылается на метод экземпляра stop ( ) класса MovieClip, от которого наследуется класс RunningMan. Являясь потомком класса MovieClip, RunningMan также имеет доступ ко всем незакрытым методам и переменным, определенным в классах EventDispatcher, DisplayObject, InteractiveObj ect, DisplayOb j ectContainer и Sprite. Например, следующий код использует метод экземпляра addChild ( ) класса DisplayObjectContainer, чтобы добавить новое текстовое поле в иерархию отображения основной временной шкалы:

// Код сценария для кадра 9 файла runningman. fla import flash. text.*;

// Добавляем новое текстовое поле в иерархию // отображения основной временной шкалы var msg:TextField = new TextField( ); msg. text = «I guess no one was home…»; msg. autoSize = TextFieldAutoSize. LEFT; msg. border = true; msg. background = true; msg. selectable = false; addChild(msg);

stop( );

В результате выполнения предыдущего кода объект TextField, на который ссылается переменная msg, добавляется в иерархию отображения основной временной шкалы. При экспортировании файла runningman. swf из файла runningman. fla

и его последующей загрузке в среду выполнения Flash текст «I guess no one was home…» появится на экране, когда головка воспроизведения достигнет кадра 9. Отображение текста на экране происходит благодаря тому, что экземпляр класса документа первого SWF-файла, загруженного в среду выполнения, автоматически добавляется в список отображения. Дополнительную информацию можно найти в гл. 20.

Руководство по actionscript. часть 6, стр. 080

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

Определения переменных и функций в сценариях кадров. Если определение переменной размещается в сценарии кадра на основной временной шкале FLA-файла, то в классе документа этого FLA-файла создается соответствующая переменная экземпляра. Подобным образом, если определение функции размещается в сценарии кадра на основной временной шкале FLA-файла, в классе документа этого FLA-файла создается соответствующий метод экземпляра.

Аналогично, если определение переменной размещается в сценарии кадра на временной шкале символа Movie Clip (Клип), в классе, связанном с этим символом, создается соответствующая переменная экземпляра. И если в сценарии кадра на временной шкале символа Movie Clip (Клип) размещается определение функции, то в классе, связанном с этим символом, создается соответствующий метод экземпляра (о символах Movie Clip (Клип) и связываемых классах будет рассказано в двух следующих разделах).

Тем не менее обратите внимание, что переменная экземпляра, созданная в сценарии кадра, будет проинициализирована только в момент выполнения этого сценария (то есть когда головка воспроизведения достигнет кадра, содержащего данный сценарий). Например, рассмотрим следующий код, демонстрирующий два сценария кадра:

// Сценарий кадра 1 trace(n): // Выводит: О

// Сценарий кадра 2 var n:int = 10; trace(n); // Выводит: 10

Когда выполняется первый из двух предыдущих сценариев кадра, переменная экземпляра п уже определена, но еще не проинициализирована (часть кода = 10 пока не выполнялась). В результате код trace (n) выведет значение 0 (значение по умолчанию для переменных типа int) в окне Output (Вывод). Когда выполняется второй сценарий, переменная экземпляра п уже проинициализирована (присвоено значение 10), поэтому код trace (п) выведет значение 10 в окне Output (Вывод).

В отличие от этого, когда выполнение сценария кадра завершено, любые переменные экземпляра, определенные в этом сценарии, могут использоваться вплоть до

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

// Сценарий кадра 3 trace(n): // Выводит: 10 gotoAndStop(l):

Когда выполняется третий сценарий, переменная экземпляра п по-прежнему имеет значение 10, поэтому код trace (п) выводит значение 10 в окне Output (Вывод). Затем код gotoAndStop (1) перемещает головку воспроизведения на кадр 1, приводя к выполнению сценария кадра 1 во второй раз. На этот раз переменная экземпляра п имеет значение 10, поэтому код trace (п) выводит значение 10 (а не 0) в окне Output (Вывод).

Руководство по actionscript. часть 6, стр. 081

Метод экземпляра, созданный в сценарии кадра, может быть использован даже до того, как головка воспроизведения достигнет кадра, содержащего определение этого метода экземпляра.

Символы и экземпляры

Ранее из разд. «Временные шкалы и кадры» мы узнали, что FLA-файл представляет собой иерархию анимаций, каждая из которых имеет собственную временную шкалу. Теперь, когда мы знаем, как создавать основную анимацию в документе Flash, рассмотрим вложенные анимации. Для их создания мы должны разобраться с символами.

В среде разработки Flash символ — это определенная пользователем анимация, кнопка или изображение с возможностью повторного использования. Символы создаются за пределами сцены в специальном режиме редактирования. Каждый FLA-файл сохраняет связанные с ним символы в хранилище элементов, называемом библиотекой (Library). Из одного символа можно создать произвольное количество его копий, или экземпляров.

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

По умолчанию, когда SWF-файл кохмпилируется из FLA-файла, в SWF-файл включаются только те символы, экземпляры которых действительно используются в документе (то есть появляются в сцене) или экспортируются для языка ActionScript (обратитесь к разд. «Создание экземпляров символов среды разработки Flash из кода на языке ActionScript»). Следовательно, содержимое каждого символа включается всего один раз и затем на этапе выполнения он дублируется для каждого экземпляра по мере необходимости. В связи с этим использование символов и экземпляров (вместо обычных изображений) может в значительной степени уменьшить размер SWF-файла.

Символ звезды в библиотеке

Library :? Unbtied-4 fv] 4й да

One item in library

Name Type ±

||@ star MovieClip

Рис. 29.6. Символ звезды и его экземпляры

Типы символов

В среде разработки Flash определены три основных типа символов:

? Movie Clip (Клип) (для анимаций с содержимым, создаваемым программным путем);

? Graphic ( Графика) (для анимаций без содержимого, создаваемого программным путем, которые могут просматриваться непосредственно в среде разработки Flash);

? Button (Кнопка) (для реализации простой интерактивности).

Руководство по actionscript. часть 6, стр. 082

К символам Graphic (Графика) нельзя обращаться из кода на языке ActionScript, а символы Button (Кнопка) предоставляют простейшие интерактивные возможности, которые также можно реализовать с помощью символа Movie Clip (Клип) или компонента Button. Таким образом, в этой главе мы опустим рассмотрение символов Graphic (Графика) и Button (Кнопка) и сосредоточимся исключительно на символах Movie Clip (Клип).

Символы Movie Clip (Клип)

Символ Movie Clip (Клип) — это самодостаточная анимация с возможностью повторного использования. Любой символ Movie Clip (Клип) имеет свою собственную временную шкалу и сцену, подобно основной временной шкале. Более того, экземпляры символов Movie Clip (Клип) могут быть вложены друг в друга для создания графики или анимаций, имеющих иерархическую структуру. Например, символ Movie Clip (Клип), представляющий нарисованное лицо, может содержать отдельный символ Movie Clip (Клип), представляющий анимированные моргающие глаза.

На рис. 29.7 изображен символ Movie Clip (Клип), созданный в среде разработки Flash. На сцене показано содержимое кадра 2 временной шкалы этого символа

Экземпляры звезды в сцене

_I_

Movie Clip (Клип). Обратите внимание, что временная шкала на рисунке не является основной временной шкалой FLA-файла, а представляет собой отдельную, независимую временную шкалу символа Movie Clip (Клип) звезды.

Ш Adobe Flash CS3

Не Edit View Inset Modify Text Commands Control Qebug Window ЦФ

p

T

\

sky. fla I

? fl 5

10 15

«J J Library x I____

tixl ф|

_ Вжат.1 » й •

Wortaj

4*

Рис. 29.7. Редактирование символа Movie Clip (Клип)

Связанные классы для символов Movie Clip (Клип)

С точки зрения языка ActionScript на этапе выполнения каждый экземпляр символа Movie Clip (Клип) в FLA-файле представляется экземпляром класса Sprite или одного из его подклассов. Класс, используемый для представления экземпляров определенного символа Movie Clip (Клип), называется связанным классом этого символа. Связанный класс символа может быть указан вручную или сгенерирован автоматически.

Руководство по actionscript. часть 6, стр. 083

Чтобы указать связанный класс для символа Movie Clip (Клип), мы используем окно Linkage Properties (Свойства связывания). Обратите внимание, что если любое из следующих утверждений верно, то указываемый связанный класс должен наследоваться от класса flash, display. MovieClip.

? Временная шкала символа содержит сценарии кадров.

? Связанный класс желает управлять экземплярами символа программным путем, используя методы класса MovieClip.

? Сцена символа содержит компоненты с настраиваемыми параметрами, и справедливо любое из следующих утверждений.

• Значения настраиваемых параметров не являются одинаковыми во всех кадрах временной шкалы. Например, символ Button (Кнопка) в кадре 1 имеет название «ОК», а в кадре 2 — «Submit».

• Компонент присутствует не во всех кадрах временной шкалы. Например, символ List (Список) с настраиваемым поставщиком данных присутствует в кадре 1, но отсутствует в кадре 2.

? Сцена основной временной шкалы содержит компоненты с настраиваемыми свойствами доступности или значения с палитры Strings (Строки).

В противном случае указываемый связанный класс должен наследоваться только от класса flash. display. Sprite.

Чтобы указать связанный класс для символа Movie Clip (Клип), выполняйте следующие шаги.

1. Выберите символ в библиотеке FLA-файла.

Руководство по actionscript. часть 6, стр. 084

2. Откройте меню Options (Свойства) палитры Library (Библиотека), щелкнув кнопкой мыши на значке в правом верхнем углу палитры, и выберите команду Linkage (Связывание).

3. В области Linkage (Связывание) окна Linkage Properties (Свойства связывания) следует установить флажок Export for ActionScript (Экспорт для ActionScript). Стоит отметить, что при этом выбранный символ включается в скомпилированный SWF-файл независимо от того, используются его экземпляры в документе или нет.

4. В поле Class (Класс) окна Linkage Properties (Свойства связывания) введите полностью уточненное имя класса (то есть имя класса, объединенное с именем пакета класса, если класс размещается в пакете). Связываемый класс должен быть доступен либо через глобальный путь к классам, либо через путь к классам FLA-файла, содержащего этот символ. Указывая имя связанного класса в окне Linkage Properties (Свойства связывания), никогда не изменяйте значения по умолчанию для параметра Base class (Базовый класс), кроме тех случаев, когда с одним суперклассом связывается более одного символа, — эта ситуация рассматривается в разд. «Связывание нескольких символов с одним суперклассом».

5. Нажмите кнопку ОК.

Если класс, указанный на шаге 4 описанной процедуры, не будет найден, то компилятор Flash автоматически сгенерирует связанный класс с указанным именем. Автоматически генерируемый класс расширяет указанный базовый класс.

Если для некоторого символа не был указан связанный класс, то компилятор устанавливает его автоматически. Если выполняются все следующие условия, то автоматически устанавливаемым связанным классом является класс MovieClip.

? Сцена символа не содержит именованных экземпляров.

? Временная шкала символа не содержит сценариев кадров.

? Сцена символа не содержит компонентов с настраиваемыми параметрами, значения которых изменяются от кадра к кадру.

? Сцена символа не содержит компонентов с настраиваемыми параметрами доступности или значений из палитры Strings (Строки).

Руководство по actionscript. часть 6, стр. 085

В противном случае автоматически устанавливаемым связанным классом будет автоматически генерируемый подкласс класса MovieClip.

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

В качестве примера свяжем наш символ Movie Clip (Клип) звезды из предыдущего раздела с подклассом Star класса MovieClip. Класс Star будет случайным образом изменять прозрачность (значение канала Alpha) каждого экземпляра звезды через каждые 100 мс.

package { import flash. display. MovieClip; import flash. utils. Timer; import flash. events. TimerEvent;

public class Star extends MovieClip { private var timer;Timer;

public function Star ( ) { timer = new TimerdOO, 0);

timer. addEventListener(TimerEvent. TIMER. timerListener); timer. start( );

}

private function timerListener (e:TimerEvent):void { randomFade( );

}

private function randomFade ( );void { // Присваиваем переменной alpha случайное значение с плавающей запятой // в диапазоне от 0 до (но не включая) 1. Переменная экземпляра alpha // наследуется от класса DisplayObject (являющегося предком класса // MovieClip). alpha = Math. random( );

}

// Предоставляет способ остановить таймер. Как рассматривалось // в разд. «Деактивация объектов» гл. 14, внешний код должен // использовать этот метод перед удалением экземпляра звезды // из программы.

Руководство по actionscript. часть 6, стр. 086

Public function dispose ( );void { timer. stop( );

Чтобы связать класс Star с символом Movie Clip (Клип) звезды, выполните следующие действия.

1. Сохраните файл, содержащий символ звезды, под именем sky. fla.

2. Сохраните класс Star в той же папке, где находится файл sky. fla, в текстовом файле под именем Star. as.

3. Выберите символ звезды в библиотеке файла sky. fla.

4. Откройте меню Options (Свойства) палитры Library (Библиотека), щелкнув кнопкой мыши на значке в правом верхнем углу палитры, и выберите команду Linkage (Связывание).

5. В области Linkage (Связывание) окна Linkage Properties (Свойства связывания) установите флажок Export for ActionScript (Экспорт для ActionScript).

6. В поле Class (Класс) окна Linkage Properties (Свойства связывания) введите значение Star.

7. Нажмите кнопку ОК.

На рис. 29.8 показано окно Linkage Properties (Свойства связывания) в том виде, в котором оно находится после выполнения шага 6 предыдущей процедуры.

Руководство по actionscript. часть 6, стр. 087

Рис. 29.8. Связывание символа Star с классом Star

Чтобы создать экземпляры символа звезды в среде разработки Flash, мы перетаскиваем название символа из библиотеки на сцену основной временной шкалы (или на сцену любого другого символа, но в данном случае у нас нет других символов в документе). Эта процедура проиллюстрирована на рис. 29.9, где изображены пять экземпляров символа звезды, перетаскиваемых на сцену первого кадра основной временной шкалы файла sky. fla.

Поместив экземпляры символа звезды на основную временную шкалу, мы можем экспортировать файл s ky. swf из файла sky. fla и понаблюдать за эффектом мерцания (определяемым символом звезды) и эффектом затухания (определяемым классом Star).

Рис. 29.9. Создание экземпляров символа звезды

Теперь, когда мы знаем, как вручную создавать экземпляры символов Movie Clip (Клип), рассмотрим, как обращаться к этим экземплярам и управлять ими.

Обращение к созданным вручную экземплярам символов

На этапе выполнения каждый экземпляр символа, который помещен на любую временную шкалу в FLA-файле, автоматически становится отображаемым ребенком объекта языка ActionScript, представляющего данную временную шкалу.

Например, в предыдущем разделе мы добавили пять экземпляров символа звезды на основную временную шкалу файла sky. fla. В результате на этапе выполнения эти пять экземпляров становятся отображаемыми объектами-детьми экземпляра класса документа файла sky. Да. Чтобы доказать это, создадим класс документа для файла sky. Да и воспользуемся методом getChildAt ( ) для получения списка всех детей основной временной шкалы.

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public function Sky ( ) { for (var i:int=0; i < numchildren; i++) { tracec"found child: " + getchi1dat(i));

}

}

}

}

В случае с предыдущим классом документа, когда приложение sky. swf будет экспортировано и воспроизведено в режиме Test Movie (Проверка фильма) среды разработки Flash, в окне Output (Вывод) появятся следующие строки:

Found child: [object Star]

Found child: [object Star]

Found child: [object Star]

Found child: [object Star]

Found child: [object Star]

I Код в методе-конструкторе класса документа SWF-файла может обращаться к любым м?; 4 щ дочерним элементам, размещенным вручную в первом кадре SWF-файла, но не во втором ___3л* или последующих кадрах (поскольку элементы, размещенные в последующих кадрах, не добавляются в список отображаемых детей до тех пор, пока головка воспроизведения не достигнет этих кадров).



Полезные ссылки
Случайные записи
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 019
  • 27.08.2011">Коротаем вечер.
  • 12.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.108
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 125
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 030
  • 20.03.2011">Руководство по actionscript. часть 2, стр. 056
  • 16.03.2011">Руководство по actionscript. часть 3, стр. 032
  • 11.03.2011">Руководство по actionscript. часть 4, стр. 016
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.49
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 065
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 095
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.56
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 049
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 143
  • 23.11.2018">Игровой автомат The Invisible Man в Граф казино
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...