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

? Встроить SWF-файл символа или класса на уровне переменной (дополнительные сведения можно получить в подразд. «Встраивание SWF-файлов целиком»), а затем использовать метод экземпляра getDefinition ( ) класса ApplicationDomain для обращения к этому символу или классу (дополнительную информацию можно найти в подразд. «Использование метода getDefinition( ) для обращения к классу во встроенном SWF-файле»).

? Встроить SWF-файл символа или класса в виде бинарных данных (дополнительную информацию можно найти в подразд. «Встраивание файлов в виде бинарных данных»), а затем использовать метод экземпляра getDefinition ( ) класса ApplicationDomain для обращения к этому символу или классу (дополнительные сведения можно получить в подразд. «Использование метода getDefinition( ) для обращения к классу во встроенном SWF-файле»).

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

Помимо отображаемых элементов, рассматриваемых в данном разделе, тег метаданных м? 4 * [Embed] может применяться для встраивания звуковых файлов и шрифтов.

Информацию по встраиванию звуковых файлов можно найти в разделе Flex Programming Topics > Embedding Assets руководства разработчика на платформе Flex 2 корпорации Adobe.

Информацию о встраивании шрифтов можно найти в разд. «Шрифты и отображение текста» гл. 27. Дополнительную информацию также можно найти в разделе

Customizing the User Interface > Using Fonts > Using Embedded fonts > Embedded font syntax > Embedding Fonts in ActionScript руководства разработчика на платформе Flex 2 корпорации Adobe.

Теперь, когда мы познакомились с основным кодом, используемым для встраивания внешнего элемента на этапе компиляции, рассмотрим несколько конкретных примеров.

Встраивание растровых изображений

Следующий код демонстрирует, как встроить изображение с именем photo. jpg на уровне переменной. Код предполагает, что файл класса, из которого происходит встраивание изображения, и файл изображения находятся в одной директории. При выполнении этого кода среда Flash автоматически генерирует класс, представляющий элемент photo. j pg, и присваивает этот класс переменной Photo, позволяя создавать экземпляры данного элемента на этапе выполнения. Этот автоматически сгенерированный класс расширяет класс mx. core. BitmapAsset.

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

[Embed(source="photo. jpg")] private var Photo:Class;

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

package { import mx. core. BitmapAsset;

[Embed(source="photo. jpg")]

public class Photo extends BitmapAsset {

}

}

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

new Photo( )

Присваивая экземпляр встроенного изображения переменной, в качестве типа данных этой переменной мы выбираем либо класс mx. core. BitmapAsset (для элементов, встраиваемых на уровне переменной), либо класс Photo (для элементов, встраиваемых на уровне класса):

var photo:BitmapAsset = new Photo( ); // Уровень переменной var photo:Photo = new Photo( ): // Уровень класса

Созданный экземпляр, как и любой другой отображаемый объект, может быть добавлен в список отображения:

addChild(photo);

Обратите внимание, что тег метаданных [ Embed] поддерживает механизм форматирования scale-9 для встраиваемых растровых изображений. Если для встраивае-

мого растрового изображения применяется механизм форматирования scale-9, то автоматически сгенерированный класс расширяет класс mx. core. SpriteAsset, а не класс mx. core. BitmapAsset. Подробную информацию о механизме форматирования scale-9 и встраиваемых растровых изображениях можно найти в разделе Flex Programming Topics > Embedding Assets > Embedding asset types > Using scale-9 formatting with embedded images руководства разработчика на платформе Flex 2 корпорации Adobe.

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

Встраивание файлов в формате SVG

Следующий код демонстрирует, как встроить изображение в формате SVG с именем line. svg на уровне переменной. Код предполагает, что файл класса, из которого происходит встраивание изображения в формате SVG, и файл изображения в формате SVG находятся в одной директории. При выполнении этого кода среда Flash автоматически генерирует класс, представляющий элемент line. svg, и присваивает этот класс переменной SVGLine, позволяя создавать экземпляры данного элемента на этапе выполнения. Этот автоматически сгенерированный класс расширяет класс mx. core. SpriteAsset.

[Embed(sou rce=" 1 i ne. s vg")] private var SVGLine:Class;

Следующий код показывает, как встраивать изображение в формате SVG с именем line. svg на уровне класса. Снова предполагается, что файл класса и файл элемента находятся в одной директории. Обратите внимание, что по необходимости класс расширяет класс mx. core. SpriteAsset.

package { import mx. core. SpriteAsset;

[Embed(sou rce="1i ne. s vg")]

public class SVGLine extends SpriteAsset {

}

}

Чтобы создать новый экземпляр встроенного изображения в формате SVG, мы используем следующий код (независимо от того, было изображение в формате SVG встроено на уровне переменной или на уровне класса):

new SVGLine( )

Присваивая экземпляр встроенного изображения в формате SVG переменной, в качестве типа данных этой переменной мы выбираем либо класс mx. core. SpriteAsset (для элементов, встраиваемых на уровне переменной), либо класс SVGLine (для элементов, встраиваемых на уровне класса):

var line:SpriteAsset = new SVGLine( ); // Уровень переменной var line: SVGLine = new SVGLine( ); // Уровень класса

Созданный экземпляр, как и любой другой отображаемый объект, может быть добавлен в список отображения:

Встраивание SWF-файлов целиком

Следующий код демонстрирует, как целиком встроить SWF-файл с именем Арр. swf на уровне переменной. Код предполагает, что файл класса, из которого происходит встраивание SWF-файла, и сам SWF-файл находятся в одной директории. При выполнении этого кода среда Flash автоматически генерирует класс, представляющий элемент Арр. swf, и присваивает этот класс переменной Арр, позволяя создавать экземпляры данного элемента на этапе выполнения. Этот автоматически сгенерированный класс расширяет класс mx. core. MovieClipLoaderAsset.

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

[Embed(s ou rce="App. swf")] private var App:Class;

Целиком SWF-файлы могут быть встроены только на уровне переменной.

Чтобы создать новый экземпляр встроенного SWF-файла, мы используем следующий код:

new Арр( )

Присваивая экземпляр встроенного SWF-файла переменной, в качестве типа данных этой переменной мы выбираем класс mx. core. MovieClipLoaderAsset:

var app:MovieClipLoaderAsset = new App( );

Созданный экземпляр, как и любой другой отображаемый объект, может быть добавлен в список отображения:

addChild(app);

Встраивание символов из SWF-файлов предыдущих версий

Следующий код демонстрирует, как на уровне переменной встроить отдельный символ с именем Ball из SWF-файла с именем f р8арр. swf в формате приложения Flash Player 8 или более ранней версии. Код предполагает, что файл класса, из которого происходит встраивание символа, и SWF-файл, содержащий этот символ, находятся в одной директории. При компиляции этого кода компилятор языка ActionScript автоматически генерирует класс, представляющий символ Ball, и присваивает этот класс переменной FP8Ball, позволяя создавать экземпляры данного символа на этапе выполнения. Автоматически сгенерированный класс расширяет класс элемента из пространства имен mx. core, соответствующий типу символа Ball (то есть классы MovieClipAsset, TextFieldAsset, ButtonAsset или класс Spr i teAs set для клипов, состоящих из одного кадра). В коде обратите внимание на использование дополнительного параметра symbol тега [Embed]:

[Embed(s ou гсе="fр8а рр. swf", symbol="Ba11")] private var FP8Ball:Class;

Следующий код демонстрирует, как на уровне класса встроить отдельный символ с именем Ball из SWF-файла с именем f р8арр. swf в формате приложения Flash Player 8 или более ранней версии. Вновь предполагается, что файл класса и файл

элемента находятся в одной директории. В этом примере мы считаем, что символ Ball является клипом, поэтому класс элемента по необходимости расширяет класс mx. core. MovieClipAsset.

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

Package { import mx. core. MovieClipAsset;

[Embed(source="fp8app. swf", symbol="Ball")] public class FP8Ball extends MovieClipAsset { }

}

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

new FP8Ball( )

Если символ был встроен на уровне переменной, то при присваивании экземпляра этого символа переменной в качестве ее типа данных мы выбираем класс элемента из пространства имен mx. core, соответствующий типу символа (то есть один из классов MovieClipAsset, TextFieldAsset или ButtonAsset). Например, наш символ Ball является клипом, поэтому экземпляры класса FP8Ball должны присваиваться переменным типа MovieClipAsset.

var fp8ball:MovieClipAsset = new FP8Ball( );

Если символ был встроен на уровне класса, то в качестве типа данных этой переменной мы выбираем класс, который использовался для встраивания символа. Например:

var fp8ball:FP8Ball = new FP8Ball( );

Созданный экземпляр, как и любой другой отображаемый объект, может быть добавлен в список отображения:

addChild(fp8ball);

Встраивание файлов в виде бинарных данных

Тег метаданных [Embed] может применяться для встраивания в приложение бинарных данных (байтов) из любого файла в виде массива байтов. В дальнейшем приложение может работать с этими байтами. Например, если встраиваемые бинарные данные представляют файл в формате GIF, JPEG, PNG или SWF, то приложение может использовать класс Loader для преобразования этих данных в отображаемый элемент.

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

В следующем коде мы встраиваем SWF-файл с именем f р9арр. swf, имеющий формат приложения Flash Player 9, в виде бинарных данных на уровне переменной. Этот код предполагает, что файл класса, из которого происходит встраивание бинарных данных, и файл, содержащий эти данные, находятся в одной директории. При выполнении этого кода среда Flash автоматически генерирует класс, представляющий бинарные данные, и присваивает этот класс переменной FP9BinaryData, позволяя использовать данные на этапе выполнения. Автоматически сгенерированный класс

расширяет класс mx. core. By teArrayAsset. В приведенном коде обратите внимание на использование дополнительного параметра mimeType тега [ Embed]:

[Embed(source="fp9app. swf", mimeType="application/octet-stream")] private var FP9BinaryData-.Class;

В следующем коде мы встраиваем SWF-файл с именем fp9app. swf, имеющий формат приложения Flash Player 9, в виде бинарных данных на уровне класса. Снова предполагается, что файл класса и файл элемента находятся в одной директории. Обратите внимание, что по необходимости этот класс расширяет класс mx. core. ByteArrayAsset.

package { import mx. core. ByteArrayAsset;

[Embed(source="fp9app. swf", mimeType="application/octet-stream")]

public class FP9BinaryData extends ByteArrayAsset {

}

}

Чтобы создать новый экземпляр встроенных бинарных данных, мы используем следующий код (независимо от того, были данные встроены на уровне переменной или на уровне класса):

new FP9BinaryData( )

Присваивая экземпляр встроенных бинарных данных переменной, в качестве типа данных этой переменной мы выбираем либо класс mx. core. ByteArrayAsset (для элементов, встраиваемых на уровне переменной), либо класс, который применялся для встраивания символа (для элементов, встраиваемых на уровне класса):

var fp9binarydata:ByteArrayAsset = new FP9BinaryData( ); // Уровень

// переменной

var fp9binarydata:FP9BinaryData = new FP9BinaryData( ); // Уровень класса

Если встроенные бинарные данные представляют файл в формате GIF, JPEG, PNG или SWF, то после создания экземпляра этих данных мы можем использовать класс Loader для генерации отображаемого элемента, как показано в следующем коде:

var loader.-Loader = new Loader ( ); 1oader.1oadBytes(fp9bi narydata); addChilddoader);

После инициализации элемент может быть добавлен в список отображения с помощью методик, рассмотренных ранее в подразд. «Отображение загруженного элемента на экране» разд. «Использование класса Loader для загрузки отображаемых элементов на этапе выполнения».

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

Методика встраивания элемента в виде бинарных данных может использоваться для встраивания в приложение файлов XML на этапе компиляции. Это демонстрирует листинг 28.14.

Листинг 28.14. Встраивание XML-файла на этапе компиляции

package { import flash. display.*;

import flash. events.*; import flash. utils. ByteArray:

public class EmbedXML extends Sprite { [Embed(source="embeds/data. xml", mimeType="application/octet-stream")] private var BinaryData:Class;

public function EmbedXML ( ) { // Создаем новый экземпляр встроенных данных var byteArray:ByteArray = new BinaryData( );

// Преобразуем экземпляр данных в XML-файл

var data:XML = new XML(byteArray. readUTFBytes(byteArray. length));

// Отображаем исходный код для встроенного XML-файла trace(data. toXMLString( ));

}

}

}

Использование метода getDeffinitionf) для обращения к классу во встроенном SWF-файле

Как мы уже знаем, отдельные символы и классы из SWF-файла в формате приложения Flash Player 9 (или более поздних версий) не могут быть встроены с помощью тега метаданных [Embed]. Вместо этого, чтобы обратиться к классу или классу символа во встроенном SWF-файле, мы можем создать ссылку на SWC-файл, содержащий желаемый класс или класс символа, либо использовать метод экземпляра getDefinition ( ) класса ApplicationDomain для обращения к желаемому классу или классу символа на этапе выполнения.

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

При использовании метода getDefinition ( ) перед попыткой обращения к символам или классам SWF-файла мы должны убедиться, что его экземпляр был проинициализирован. Для этого мы регистрируем приемник в объекте Loaderlnfo объекта встроенного элемента для событий Event. INIT. В зависимости от того, как происходит встраивание SWF-файла, мы обращаемся к объекту Loaderlnfo различными способами. Если SWF-файл был встроен непосредственно на уровне переменной, то мы используем следующий код, чтобы зарегистрировать приемник для событий Event. INIT:

// Создаем экземпляр элемента

var экземплярВстроенногоЭлемента:MovieClipLoaderAsset = new ИмяКласса( );

// Регистрируем приемник для события Event. INIT

Loader (экземплярВстроенногоЭлемента. getChi]6/\t(0)) .contentLoaderlnfo.

addEventListener(

Event. INIT,

приемникСобытия1И1Т);

В приведенном коде ИмяКласса — переменная, которая ссылается на класс, представляющий встроенный SWF-файл, экземплярВстроенногоЭлемента — экземпляр класса

ИмяКласса, а приемникСобытия1И1Т — ссылка на функцию, которая будет выполняться при инициализации экземпляра.

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

С другой стороны, если SWF-файл был встроен в виде бинарных данных, мы используем следующий код, чтобы зарегистрировать приемник для получения уведомлений о возникновении события Event. INIT:

// Создаем экземпляр элемента

var BnHapHbie/IaHHbie:Bytel\rrayl\sset = new БинарныеДанные( );

// Генерируем отображаемый объект, представляющий SWF-файл var loader:Loader = new Loader( ); loader. loadBytes{БинарныеДанные); addChilddoader);

// Регистрируем приемник для события Event. INIT

1oader. contentLoaderlnfo. addEventLi stener(Event. INIT.

приемникСобытияНУП);

Здесь БинарныеДанные — переменная, которая ссылается на класс, представляющий бинарные данные встроенного SWF-файла, БинарныеДанные — экземпляр класса БинарныеДанные, а приемникСобытияНУП, как и раньше, — ссылка на функцию, которая будет выполняться при инициализации экземпляра данного SWF-файла.

Следующий код демонстрирует пример приемника события Event. INIT, который получает ссылку на класс символа клипа с именем Ball. Этот код также создает экземпляр символа Ball и добавляет его в иерархию отображения класса метода initListener ( ).

private function initListener (e:Event):void { // Получаем ссылку на символ Ball из встроенного SWF-файла var Ball Symbol:Class =

e. target. content.1oaderInfо. appli cati onDomai n. getDefi ni ti on(«Bal 1″);

// Создаем новый экземпляр символа Ball

var ball:MovieClip = MovieClip(new BallSymboK ));

// Помещаем экземпляр символа Ball на экран addChild(ball);

}

Пример использования тега [Embed]

Для справки в листинге 28.15 показан класс, который демонстрирует сценарии использования тега [ Embed ] на уровне переменной, рассмотренные в предыдущих разделах.

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

Листинг 28.15. Класс, демонстрирующий встраивание элементов на уровне переменной

package { import flash. display.*; import flash. events.*; import mx. core. MovieClipAsset; import mx. core. MovieCli pLoaderAsset;

import mx. core. SpriteAsset; import mx. core. BitmapAsset; import mx. core. ByteArrayAsset;

public class VariableLevelEmbedDemo extends Sprite { [Embed(sou rce="photo. jpg")] private var Photo:Class;

[Embed(s ou rc e="1i ne. s vg")] private var SVGLine:Class;

[Embed(source="fp9app. swf")] private var FP9App:Class;

[Embed(source="fp8app. swf", symbol="Ball")] private var FP8Ball-.Class;

[Embed(source="fp9app. swf", mi meType="appli cati on/octet-stream")] private var FP9BinaryData:Class;

public function VariableLevelEmbedDemo ( ) { // Растровое изображение, встраиваемое // на уровне переменной var photo:BitmapAsset = new Photo( ); addChild(photo);

// Файл в формате SVG, встраиваемый на уровне переменной var line:SpriteAsset = new SVGLine( ); addChild(line);

// Символ SWF-файла в формате приложения Flash Player 8, встраиваемый

// на уровне переменной

var fp8ball:MovieClipAsset = new FP8Ball( );

addChild(fp8ball);

// SWF-файл в формате приложения Flash Player 9. встраиваемый // на уровне переменной

var fp9app:MovieClipLoaderAsset = new FP9App( ); addChild(fp9app);

// Чтобы обратиться к классу символа или к обычному классу // во встроенном SWF-файле, необходимо дождаться завершения // инициализации данного SWF-файла

Loader(fр9арр. getChi1dAt(0)).contentLoaderlnfo. addEventLi stener(

Event. INIT. fp9appInitListener);

// Бинарные данные (SWF-файл в формате приложения Flash Player 9),

// встраиваемые на уровне переменной

var fp9biпаrydata:ByteArrayAsset = new FP9BinaryData( );

var loader:Loader = new Loader( );

1oader.1oadBytes(fp9bi na rydata); addChilddoader);

// Чтобы обратиться к классу символа или к обычному классу // во встроенном SWF-файле, необходимо дождаться завершения // инициализации данного SWF-файла 1oader. contentLoaderlnfo. addEventLi stener(Event. INIT,

fp9binarydataInitListener);

}

private function fp9appInitListener (e:Event):void { // Получаем ссылку на символ Ball из встроенного SWF-файла var Ball Symbol:Class =

e. ta rget. content.1oaderInfо. appli cati onDomai n. getDefi ni ti on(«Bal 1″); // Создаем новый экземпляр символа Ball var ball:MovieClip = MovieClip(new Ball Symbol( )); // Устанавливаем положение экземпляра символа Ball и помещаем его // на экран ball. х = 220; ball. у = 240; addChild(ball);

}

private function fp9binarydataInitListener (e:Event):void { // Получаем ссылку на символ Ball из встроенного SWF-файла var BallSymbol:CIass =

e. target. content.1oaderInfо. appli cati onDomai n. getDefi ni tion(«Bal 1″); // Создаем новый экземпляр символа Ball var ball.-MovieClip = MovieClip(new BallSymboK )); // Устанавливаем положение экземпляра символа Ball и помещаем его // на экран ball. у = 200; addChild(ball);

}

}

}

Очищайте проект, чтобы увидеть изменения

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



Полезные ссылки
Случайные записи
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 059
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 107
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 037
  • 21.06.2011">Объективные стороны рестайлинга сайтов.
  • 20.02.2012">Владельцы Twtter.com и Wikapedia.com оштрафованы за мошенничество
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 015
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.9
  • 27.08.2011">Пример успешной стратегии — компания Acer и её ноутбуки
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 083
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 065
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 031
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 021
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 060
  • 15.01.2011">Зачем используется раскройка изображения в Photoshop и как ее сделать?
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.102
Опрос

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

View Results

Loading ... Loading ...