Февраль 2011

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

Подобным образом при использовании методов и переменных класса MovieClip над загруженным SWF-файлом мы приводим значение переменной content к типу MovieCl ip. Например, следующий код начинает воспроизведение гипотетической анимации путем вызова метода экземпляра play ( ) miaccaMovieClip над загруженным элементом. Операция приведения типов (обязательная) сообщает компилятору, что загруженный элемент является потомком класса MovieCl ip и, следовательно, поддерживает метод play ( ).

MovieClip(loader. content).play( );

Точно так же, когда используются пользовательские методы и переменные основного класса загруженного SWF-файла, вполне естественно ожидать, что значение переменной content приводится к этому основному классу. Предположим, что приложение Main. swf загружает другое приложение Module. swf, основным классом которого является класс Module. Предположим также, что класс Module определяет собственный метод start ( ). Когда приложение Ma in. swf загружает приложение Module. swf, среда выполнения Flash автоматически создает экземпляр класса Module и присваивает его переменной content. Таким образом, чтобы вызвать метод start ( ) над загруженным экземпляром класса Module, можно предположить, что необходимо использовать следующую операцию приведения типов:

Module(loader. content).start( );

Хотя, по существу, предыдущий код корректен, фактически он будет вызывать ошибку на этапе компиляции до тех пор, пока не будут приняты особые меры при компиляции файла Main. swf. Рассмотрим почему.

Предположим, что приложения Ma in. swf и Module, swf созданы в виде отдельных проектов в приложении Flex Builder 2. Эти два проекта созданы с учетом того, что приложения должны быть автономными и независимыми, поэтому в них используется совершенно разный код и они никак не ссылаются друг на друга. В проекте приложения Module. swf определяется класс Module, однако приложение Main. swf ничего не знает про этот класс. При построении файла Main, swf компилятор встречает следующий код:

Module(loader. content).start( )

и не может разрешить ссылку на класс Module, используя пути, указанные для свойства ActionScript Build Path (Путь компиляции ActionScript) приложения Main. swf. Не найдя класс Module, компилятор предполагает, что выражение Module (loader. content) является вызовом метода. Однако метода с именем Module не существует, поэтому компилятор генерирует следующую ошибку типа:

1180: Call to a possibly undefined method Module.

По-русски она будет звучать так: Вызов, возможно, неопределенного метода Module.

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

Существует два способа решения данной проблемы: мы можем отключить проверку типов на этапе компиляции или предоставить компилятору доступ к классу Module при компиляции файла Main. swf. Эти способы рассматриваются в двух следующих разделах.

Отключение проверки типов на этапе компиляции

Чтобы отключить проверку типов на этапе компиляции при применении пользовательских методов и переменных основного класса загруженного SWF-файла, мы можем привести значение переменной loader. content к типу данных Ob j ect, как показано в следующем коде:

Object(loader. content).start( ); // Ошибки компиляции не будет

Кроме того, можно присвоить то значение, на которое ссылается переменная loader. content, нетипизированной переменной:

var module:* = 1oader. content:

module. start( ): // Ошибки компиляции не будет

В качестве альтернативы мы можем обратиться к загруженному объекту с помощью выражения событие In 11. target. content из функции-приемника события Event. INIT. Проверки типа значения переменной экземпляра target класса Event на этапе компиляции не происходит, поскольку типом данных объекта target является Object.

private function initListener (e:Event):void { e. target. content. start( ): // Ошибки компиляции не будет

}

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

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

Чтобы избежать увеличения времени отладки, мы можем предоставить компилятору доступ к классу Module при компиляции приложения Main. swf. Этот процесс подробно описан в следующем разделе.

Предоставление компилятору доступа к загружаемому классу

Чтобы избежать ошибок компиляции при приведении значения переменной loader. content к основному классу загружаемого SWF-файла, мы можем предоставить компилятору языка ActionScript доступ к этому классу на этапе компиляции. Для этого существуют три различные методики: путей исходных файлов, путей библиотек и путей внешних библиотек. Каждая из перечисленных методик рассматривается в трех следующих разделах на примере класса Module из предыдущего раздела. В каждом случае компилятору предоставляется доступ к классу Module при компиляции приложения Main. swf.

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

? допускается увеличение общего размера файлов приложения;

? вы хотите сделать так, чтобы исходный код загружаемого SWF-файла (в нашем примере Module. swf) был непосредственно доступен автору приложения, из которого происходит обращение к этому SWF-файлу (Main. swf в нашем примере).

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

? вы не хотите, чтобы исходный код загружаемого SWF-файла был непосредственно доступен автору приложения, из которого происходит обращение к этому SWF-файлу;

? время, необходимое для компиляции SWF-файла, к которому происходит обращение, должно быть минимизировано.

Используйте методику путей внешних библиотек, когда увеличение размера файла всего приложения не допускается.

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

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

Включение файла класса Module в пути исходных файлов приложения Main. swf

Первая методика для предоставления компилятору доступа к классу Module при компиляции приложения Main. swf заключается во включении файла класса Module в пути исходных файлов приложения Main. swf.

Следующие шаги описывают данный процесс для приложения Flex Builder 2.

1. В палитре Navigator (Навигатор) выберите папку проекта приложения Main. swf.

2. В меню Project (Проект) выберите команду Properties (Свойства).

3. В появившемся окне Properties (Свойства) установите флажок ActionScript Build Path (Путь компиляции ActionScript).

4. На вкладке Source path (Пути исходных файлов) нажмите кнопку Add Folder (Добавить путь).

5. В открывшемся окне Add Folder (Добавление папки) укажите путь к папке, содержащей файл класса Module.

6. В окне Add Folder (Добавление папки) нажмите кнопку ОК.

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

7. В окне Properties (Свойства) нажмите кнопку ОК.

Следующие шаги описывают эквивалентный процесс включения файла класса Module в пути исходных файлов приложения Main, swf для приложения Flash CS3.

1. Откройте соответствующий FLA-файл приложения Main. swf — Main. fla.

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

2. Выберите команду меню File > Publish Settings (Файл > Настройки публикации).

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

4. В появившемся окне ActionScript 3.0 Settings (Параметры ActionScript 3.0) нажмите кнопку со знаком «плюс» и укажите путь к папке, содержащей файл класса Module.

Как только файл класса Module будет включен в пути исходных файлов приложения Main. swf, компилятор сможет проверять типы для любого обращения к классу Module, происходящего в приложении Main. swf. Кроме того, компилятор добавит байт-код для класса Module (и для всех зависимых определений) непосредственно в файл Main. swf, гарантируя доступность MaccaModule из приложения Main. swf на этапе выполнения. Таким образом, методика путей исходных файлов увеличивает общий размер файлов приложения, поскольку класс Module и его зависимые определения включаются в файлы Main. swf и Module. swf. Более того, при использовании методики путей исходных файлов компиляция класса Module осуществляется с нуля всякий раз, когда компилируется приложение Main. swf, что может приводить к временным затратам.

Включение файла класса Module в пути библиотек приложения Main. swf

Вторая методика для предоставления компилятору доступа к классу Module при компиляции приложения Main. swf заключается в создании SWC-файла, содержащего класс Module, и включении этого SWC-файла в пути библиотек приложения Main, swf.

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

Чтобы создать SWC-файл, содержащий класс Module, в приложении Flex Builder 2, мы используем консольный компилятор компонентов сотрс (компилятор сотрс находится во вложенной папке Flex SDK 2\bin внутри папки, в которую было установлено приложение Flex Builder 2). Ниже представлен общий вид команды, используемой для компиляции SWC-файла с помощью компилятора сотрс:

сотрс — source-path путь_к_определениям — output путь_к_БМС_файлу — include-classes именаОпределений

Здесь путь_к_определениям — список местоположений, в которых компилятор должен искать классы и другие определения при создании SWC-файла, путь_к_5МС_фай-лу — путь к создаваемому SWC-файлу, а именаОпределений — список определений, которые будут включены в SWC-файл (компилятор автоматически включает все зависимые определения). Предположим, мы работаем в операционной системе Windows ХР и хотим создать SWC-файл с именем module. swc в папке с: \ apps\module\bin\.Mbi хотим, чтобы файл modu 1 е. swс включал класс Module, файл которого находится в папке с: \apps\module\src. Чтобы создать файл module. swc, мы используем следующую команду:

compc — source-path c:\apps\module\src — output c:\apps\module\bin\module. swc

included asses

Module

Стоит отметить, что, несмотря на свое название, параметр — include-classes компилятора сотрс может использоваться для включения любых типов определений, а не только классов. Возможно, в будущих версиях компилятора появится параметр с более подходящим названием —include-definitions.

Теперь рассмотрим эквивалентный процесс создания SWC-файла, содержащего класс Module, в приложении Flash CS3.

1. Создайте новый документ Flash (FLA-файл) с именем Module. Да.

2. В поле Document class (Класс документа) палитры Properties (Свойства) введите значение Module.

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

3. Выберите команду меню File > Publish Settings (Файл > Настройки публикации).

4. На вкладке Formats (Форматы) в области Туре (Тип) снимите флажок HTML.

5. На вкладке Flash в области Options (Параметры) установите флажок Export SWC (Экспорт SWC).

6. Нажмите кнопку Publish (Опубликовать), а затем кнопку ОК.

Создав файл module. swc, мы включаем его в пути библиотек при компиляции приложения Main. swf. Для этого в приложении Flex Builder 2 нужно выполнить следующие шаги.

1. На палитре Navigator (Навигатор) выберите директорию проекта приложения Main. swf.

2. В меню Project (Проект) выберите команду Properties (Свойства).

3. В появившемся окне Properties (Свойства) установите флажок ActionScript Build Path (Путь компиляции ActionScript).

4. На вкладке Library path (Пути библиотек) нажмите кнопку Add SWC (Добавить SWC).

5. В окне Add SWC (Добавление SWC) укажите путь к файлу module. swc.

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

6. В окне Add SWC (Добавление SWC) нажмите кнопку ОК.

7. Теперь в окне Properties (Свойства) нажмите кнопку ОК.

Чтобы включить файл module. swc в пути библиотек при компиляции приложения Main. swf в приложении Flash CS3, выполните следующие шаги.

1. Во вложенной папке Configuration\Components внутри папки, в которую была установлена среда разработки Flash, создайте новую папку с именем Module. В Windows ХР по умолчанию используется следующий путь к вложенной папке Configuration\Components:С:\Program Files\Adobe\Adobe Flash CS3\en\ Configuration\Components. В операционной системе Mac OS X по умолчанию используется такой путь к вложенной папке Configuration\Components: Macintosh HD: Applications-.Adobe Flash CS3 : Configuration : Components.

2. Скопируйте файл module. swc в папку Module, созданную на шаге 1. В результате копирования файла module. swc во вложенную папку Configuration\Components

этот файл будет добавлен на палитру Components (Компоненты) среды разработ-

3. В среде разработки Flash откройте палитру Components (Компоненты) (команда меню Window > Components (Окно > Компоненты)).

4. Откройте меню Options (Параметры), щелкнув на значке в правом верхнем углу палитры Components (Компоненты), и выберите команду Reload (Обновить). Папка Module появится на палитре Components (Компоненты).

5. На палитре Components (Компоненты) откройте папку Module.

6. Откройте палитру Library (Библиотека) файла Main. fla (команда меню Window > Library (Окно > Библиотека)).

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

7. Перетащите компонент Module с палитры Components (Компоненты) на палитру Library (Библиотека) файла Main. fla.

Как только файл module. swc будет включен в пути библиотек приложения Main. swf, компилятор сможет проверять типы для любого обращения к классу Module, происходящего в приложении Main. swf. Кроме того, компилятор копирует байт-код класса Module (и всех зависимых классов) непосредственно из файла module. swc в приложение Ma in. swf, гарантируя доступность класса Module из приложения Main. swf на этапе выполнения. Таким образом, как и в случае с методикой путей исходных файлов, методика путей библиотек увеличивает общий размер файлов приложения, поскольку класс Module и его зависимые определения включаются и в Main. swf, и в Module. swf. Тем не менее, поскольку при использовании методики путей библиотек класс Module не компилируется с нуля всякий раз, когда компилируется приложение Main. swf, компиляция приложения Main. swf с использованием методики путей библиотек обычно быстрее, чем с использованием методики путей исходных файлов.

Безусловно, всякий раз, когда изменяется класс Module, сам файл module. swc необходимо создавать заново. Следовательно, если класс Module изменяется гораздо чаще, чем приложение Main. swf, время, сэкономленное при копировании байт-кода непосредственно из файла module. swc в файл Main. swf, будет полностью потрачено на компиляцию файла module. swc. Выражаясь современным языком, ваши результаты могут отличаться.

Третья методика для предоставления компилятору доступа к классу Module при компиляции приложения Main. swf заключается в создании SWC-файла, содержащего класс Module, и включении этого SWC-файла в пути внешних библиотек приложения Main. swf.

Применение этой методики начинается с выполнения инструкций из предыдущего раздела по созданию файла module. swc. Создав этот файл, мы включаем его

ки Flash.

Копирование заранее скомпилированного байт-кода из SWC — в SWF-файл оказывается быстрее, чем компиляция приложений из исходных файлов определений.

Включение файла класса Module

в пути внешних библиотек приложения Main. swf

в пути внешних библиотек приложения Main. swf. Для этого в приложении Flex Builder 2 необходимо выполнить следующие шаги.

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

1. На палитре Navigator (Навигатор) выберите директорию проекта приложения Main. swf.

2. В меню Project (Проект) выберите команду Properties (Свойства).

3. В появившемся окне Properties (Свойства) установите флажок ActionScript Build Path (Путь компиляции ActionScript).

4. На вкладке Library path (Пути библиотек) нажмите кнопку Add SWC (Добавить SWC).

5. В окне Add SWC (Добавление SWC) укажите путь к файлу module. swc.

6. В окне Add SWC (Добавление SWC) нажмите кнопку ОК.

7. В дереве списка Build path libraries (Пути библиотек компиляции) раскройте файл module. swc.

8. Среди раскрывшихся свойств файла module. swc выделите свойство Link Туре (Тип связи) с установленным значением Merged into code (Внедрить в код).

9. Нажмите кнопку Edit (Изменить).

10. В появившемся диалоговом окне Library Path Item Options (Параметры элемента путей библиотек) для параметра Link Туре (Тип связи) выберите значение External (Внешний).



Полезные ссылки
Случайные записи
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 024
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.37
  • 20.02.2011">Как сделать дождь в Adobe Photoshop?
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 034
  • 11.11.2011">ColorReplacementTool
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.62
  • 11.03.2011">Руководство по actionscript. часть 3, стр. 146
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 002
  • 13.03.2011">Руководство по actionscript. часть 3, стр. 094
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.158
  • 11.03.2011">Руководство по actionscript. часть 4, стр. 002
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.9
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.98
  • 13.03.2011">Руководство по actionscript. часть 3, стр. 092
  • 28.07.2011">Выживет только лучший
Опрос

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

View Results

Loading ... Loading ...