Февраль 2011

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

^ 1 Сценарии кадров не могут содержать инструкции class, package или interface либо атрибуты public, internal, private, dynamic или static, но могут включать любой другой код 3?’ на языке ActionScript.

Программирование с помощью сценариев кадров иногда называют созданием сценариев на временной шкале. Это старейший вид программирования на ActionScript, а до появления версии языка 2.0 и приложения Flash Player 7 это был единственный вид программирования на ActionScript. Возможно, часть наиболее новаторских разработок сообщества Flash появилась в результате соединения содержимого временной шкалы и сценариев кадров.

Чтобы привести пример сценария кадра, добавим блок кода в последний кадр анимации с бегущим человечком. В нашем примере сценария кадра будет открываться URL-адрес http://moock. org в новом окне браузера. Вот этот код:

new URLRequest(«http://moock. org» blank»);

import flash. net.*; var request:URLRequest navi gateToURL(request.

На палитре Actions (Действия) среды разработки Flash наш сценарий кадра будет выглядеть так, как показано на рис. 29.5. Обратите внимание, что на временной шкале ключевые кадры со сценариями кадров обозначаются маленьким значком «а» (первая буква названия языка ActionScript).

File Edit View (JeJp

Insert Modify Text Commands Control Debug tflflndow

k

Щ

P

т

\

J



J nnraigman. fla |__

Actions • Frame * |ц_„

? * P $ I fi? *> П S V?> CO С H

и

import flash. net.*; var request:URLRequest navxgateToiJRL(request,

new URLRequest (

г 13Г. К») ;

\ Scnpt Assist ф

r-.ccJc..:rg»);

10 Layer 1:9 id

¦ Une4of4,Cd 1

Рис. 29.5. Сценарий кадра

В существующем виде наш сценарий имеет одну проблему. По умолчанию среда выполнения Flash зацикливает анимации (то есть воспроизводит их повторно). Таким образом, наш сценарий будет выполняться всякий раз при завершении очередного цикла воспроизведения анимации с бегущим человечком, приводя к открытию множества окон браузера. Мы должны использовать метод экземпляра stop ( ) класса MovieClip для предотвращения повторного воспроизведения анимации, как показано в следующем коде. С методами класса MovieClip, предназначенными для управления воспроизведением, мы подробно познакомимся далее, в разд. «Программное управление временной шкалой».

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

Import flash. net.*;

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

В предыдущем коде метод stop ( ) вызывается над объектом языка ActionScript, представляющим основную временную шкалу. В следующем разделе подробно

описывается представление основной временной шкалы и имдс объекта в языке ActionScript.

Стоит отметить, что сценарии кадров могут ссылаться на любой пользовательский класс (или другое определение), доступный через путь к исходным классам документа (устанавливаемый для каждого FLA-файла) или через глобальный путь к классам (применяемый ко всем FLA-файлам). Чтобы задать путь к классам документа, выберите команду меню File > Publish Settings (Файл > Настройки публикации), нажмите кнопку Settings (Параметры), расположенную возле параметра ActionScript version (Версия ActionScript) с установленным значением ActionScript 3.0 на вкладке Flash, и укажите необходимые значения в списке Classpath (Путь к классам). Чтобы задать глобальный путь к классам, выберите команду меню Edit > Preferences (Правка > Предпочтения), затем выберите категорию ActionScript, нажмите кнопку ActionScript 3.0 Settings (Параметры ActionScript 3.0) в области Language (Язык) и укажите необходимые значения в списке Classpath (Путь к классам).

Класс документа

С точки зрения ActionScript основная временная шкала FLA-файла считается экземпляром класса документа, указать который можно следующим образом: выберите команду меню File > Publish Settings (Файл > Настройки публикации), нажмите кнопку Settings (Параметры), расположенную возле параметра ActionScript version (Версия ActionScript) на вкладке Flash, и введите необходимое значение в поле ввода Document class (Класс документа).

Этот класс документа должен наследоваться от класса flash. display. MovieClip, если выполняются следующие условия.

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

? Класс документа желает управлять основной временной шкалой программным путем с помощью методов класса MovieClip.

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

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

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

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

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

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

При указании класса документа для FLA-файла используйте только полностью уточненное имя класса; не включайте расширение файла (AS).

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

Если для FLA-файла не был указан класс документа, то он устанавливается автоматически. Если выполняются все следующие условия, то автоматически устанавливаемым классом документа становится класс flash. display. MovieClip.

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

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

Руководство по 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 (Строки).



Полезные ссылки
Случайные записи
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.86
  • 20.03.2011">Руководство по actionscript. часть 2, стр. 078
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 056
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.54
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.47
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 129
  • 06.07.2011">Типичные ошибки начинающих веб-дизайнеров
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 060
  • 06.04.2010">Инструменты и сервисы для оптимизации графики
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.85
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 125
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 036
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 109
  • 23.07.2011">Каждая квартира достойна уникального дизайна
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 077
Опрос

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

View Results

Loading ... Loading ...