блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
|
http://www.person13.com/articles/com...omponents.html
доступная статья, всё доходчиво описано
думал даже ее перевести, но потом забросил
вот начало перевода
Цитата:
Создание компонентов во Flash MX 2004
Пусть вас не пугает идея создания собственного компонента. Несмотря на то, что компоненты могут выглядеть очень сложными, на самом деле они всего лишь доработанные мувиклипы. Безусловно вы знаете как обращаться с мувиклипами, и даже если вы не знаете, вы всё равно поймёте как создать свой собственный компонент. Единственное что вам понадобится: это понимать что такое ActionScript 2.0 классы. Если вы не знакомы с классами в ActionScript 2.0, то вам сюда: Введение в ActionScript 2.0.
В этой статье мы обсудим следующее:
* Преимущества компонентов.
* Подготовка мувиклипа компонента.
* Создание простейшего класса компонента.
* Связывание класса с мувиклипом.
* Экспорт в compiled clip.
One thing that you may notice is not included in the preceding list is a discussion of extending the v2 component framework. The much-hyped v2 framework is not something I am going to discuss in this article for several reasons. One reason is that I think you'll find a benefit in understanding how to create a component from scratch, without relying heavily on the architecture built by Macromedia that can obfuscate the fundamental principals. Additionally, I don't find too much to champion about the v2 framework. While it definitely provides some nice functionality such as style and focus management, it also adds significant overhead in terms of kilobytes to your .swf. For example, if you add the Macromedia ProgressBar component to a Flash document and export the .swf, the file is 27KB. If you extend the v2 framework, you can be assured that your components will also have a minimum filesize that approximates that of the Macromedia ProgressBar.
I will note, however, that even if you do want to extend the v2 framework, this article will still cover all the basic concepts that you will want to know. Once you've understood the principals in this article you will be prepared to then utilize the v2 framework.
Преимущества компонентов
Перед тем как вы нечнёте учиться создавать компоненты, возможно будет полезно сперва разбираться с преимуществами использования компонентов. Несмотря на то, что компонент это всего лишь доработанный мувиклип, комронет это знечительно большее. Это пример того, когда целое это больше чем его части.
Касательно основных UI компонентов входящих в комплект флэш. Consider the basic UI components included with Flash. Вы можете создать комбобокс или кнопку, как только вам это понадобится. Вы можете нарисовать всё сами, написать кучу кода в главном таймлайне и получить нечто очень похожее. Но безусловно гораздо проще прость перетянуть компонент и установить несколько парпметров. Этот простой пример демонстрирует значительное приимущество компонентов. А именно, в компонент заключен многократно используемый функционал, таким образом, что для использования вам остаётся просто затащить его на сцену. Кроме того, компоненты позволяют вам устанавливать параметры как через графический интерфейс (Component Inspector), так и используя API.
Компоненты не только позволяют инкапсулировать функционал, но и облегчают распространение. Если вы хотите позволить кому-либо использовать ваш компонент, всё что вам остаётся сделать это только упаковать его, выслать им, и несколькими кликами они смогут установить его. Более того, если вы упакуете свой компонент как .swc файл, ващ код будет сравнительно защищённым. (хотя существуют декомпиляторы которые умеют извлекать ActionScript код.)
Подготовка мувиклипа компонента
За несколькими исключениями вы будете аттачить или грузить всю графику на лету. Это означает, что вы будете оперировать всем используя только ActionScript. Поэтому мувиклип компонента будет совершенно простым. Тем не менее, есть несколько вещей которые следует иметь в виду:
* Фактически компонент показывает только ту графику, которая попадает в границы области которую занимала графика до комптляции. Это может показаться немного странным. На практике это означает, что если вы оставите сцену совершенно пустой, то после компиляции любая приаттаченная или подгруженная графика не будет отображаться. Решением является положить прямоугольный мувиклип в первый кадр таймлайна компонента. Я обычно даю ему имя mcBoundingBox. Этот mcBoundingBox должен занимать ту область в которую будет помещаться вся грофика.
* Для того чтобы потом корректно экспортировать .swc файл, символ компонент должен содержать все символы, которые будут приаттачены скриптом. Иначе символы не будут включены в .swc при экспорте. Поэтому, нужно создать второй кадр в таймлайне мувиклипа компонента, и положить туда все символы исползуемые скриптом.
* Единственное что осталоь, это добавить команду stop() в первый кадр.
Создание класса компонента.
Компонент состоит по крайней мере из одного мувиклипа и связанного с ним ActionScript класса. Вы уже знаете как подготовить мувиклип, теперь нам осталось обсудить как создать ActionScript класс.
Класс нашего компонента будет расширять MovieClip класс. Расширяя MovieClip класс, вы можете быть уверены, что компонент унаследует все свойства и методы класса MovieClipЭто значи, что вы сможете использовать ActionScript для таких целей как изменение положения на сцене, управление прозрачностью, видимостью, и т. д. Также это значит что что вы сможете использовать такие методы как createEmptyMovieClip() и attachMovie() внутри класса и внутри элементов вложенных в компонент. Ваш класс может раширять MovieClip как непосредственно так и опосредовенно. Например, вы можете создать класс-основу для всех сврих компонентов, который будет содержать общие для всех свойства и методы. В таком случае этот класс должен расширять MovieClip, а классы всх ваших компонентов должны расширять класс-основу.
Есть несколько специальных методов которыми может (и возможно должен) быть снабжён класс компонента. Мы рассмотрим некоторые из них немного позже. Но сперва, давайте напишем простейший пример класса.
class com.person13.SampleComponent extends MovieClip {
// Вы должны объявить все члены класса для того что бы ссылаться на них из кода.
// В данном случае, mcBoundingBox это имя которое мы дали символу (габаритному контейнеру)
// лежащему в первом кадре мувиклипа компонента.
private var mcBoundingBox:MovieClip;
function SampleComponent() {
// Может быть полезным иметь constructor функцию для вызова других методов или даже
// для размещения большого количества кода. Это поможет хорошо организовывать код.
// В следующих примерах вы увидите насколько это удобно.
init();
}
private function init():Void {
// Вероятно вы захотите сделать габаритный контейнер невидимым, и уменьшить его размеры до 0.
// Габаритный контейнер определяет область прорисовки компонента во время работы нед сценой,
// но во время работы скрипта его можно спрятать.
mcBoundingBox._visible = false;
mcBoundingBox._width = 0;
mcBoundingBox._height = 0;
}
}
Данный пример демонстрирует основы класса компонента. Убедитесь что вы расширяете MovieClip класс и габаритный контейнер спрятан. Код пока ничего особенного не выполняет, просто я хочу показать вам весь процес последовательно что бы: а) не говорить обо всём одновременно б) показать для чего каждая часть нужна.
Как вы заметили, в комментариях вышеприведённого кода, я рекомендую вызовать другие методы прямо из constructor функции. Вот методы которые я обычно вызываю из constructor (по порядку):
* init() - Это метод внутри которого может находиться код установки исходного состояния. Тут я обычно устанавливаю масштаб (_xscale и _yscale) компонента в 100% (зачем вы узнаете ниже), прячу габаритный контейнер (как вы уже заметили) и инициирую отслеживание событий (подробнее об этом тоже немного позже).
* createChildren() - Это метод в котором я создаю и аттачу все мувиклипы, текстовые поля и т. д. Обычно тут находятся attachMovie() и/или createEmptyMovieClip().
* draw() - Тут место где я программно рисую всё что необходимо. Не во всех компонентах есть чего рисовать, но если есть то у меня это делает функция draw() .
* arrange() - Метод где находится код расставляющий всю графику по местам. Обычно этот метод вызывается неоднократно (например во время изменения размеров компонента).
Далее рассмотрим всё это подробнее.
Связывание класса компонента с мувиклипом.
Создав класс компонента и мувиклип, вашим следующим шагом будет связать их вместе. Когда вы создаёте экземпляр мувиклипа (либо перетаскивая на сцену из библиотеки, либо приаттачивая кодом) - Flash связывает его с MovieClip классом. Но вам нужно что бы Flash ассоциировал символ с вашим собственным классом, что бы получить доступ к функционалу прописанному там.
Вы можете связать класс с мувиклипом указав класс в поле ActionScript 2.0 class в настройках связей (linkage settings) символа. Что бы добраться до настрек связей (linkage settings) кликните правой кнопкой мыши по символу в библиотеке и выберите Linkage... Там вам следует сделать следующее:
* Выбрать Export for ActionScript.
* Назначить символу linkage identifier.
* Указать класс в поле AS 2.0 Class. Вы должны указать полное корректное имя класса. Это значит что если класс находится внутри пакета (package) то вы должны указать имя пакета. (подробнее тут)
Также вам следует указать класс в описании компонента (component definition). Что бы добраться до описания компонента (component definition) кликните правой кнопкой мыши по символу в библиотеке и выберите Component Definition... . Укажите полное корректное имя класса в поле AS 2.0 Class.
Сделав эти две вещи вы связали класс с символом. Теперь когда вы создите экземпляр этого мувиклипа Flash автоматически будет ассоциировать его с вашим классом вместо класса MovieClip по умолчанию.
|
__________________
Хороший отдых - половина работы.
|