Статьи

Как использовать внешнюю библиотеку в ваших проектах Flash

Итак, вы читали об удивительной библиотеке Flash, движке или API и хотите использовать ее в своем собственном проекте. Вы загружаете его … но это либо какой-то странный файл, который вы не знаете, как использовать (SWC), либо миллион папок файлов AS — ничего, что говорит «двойной щелчок, чтобы установить меня». Какого черта?

Библиотека — это просто набор классов ActionScript, которые были разработаны таким образом, чтобы они не были привязаны к какому-либо одному проекту, и могут использоваться во всем, что вы создаете. Эти файлы классов могут быть объединены в один файл SWC, который похож на zip.

Я буду использовать отличный MinimalComps Кейта Питерса в качестве примера, потому что он доступен как в формате SWC, так и в формате папок. Это же относится и ко всем библиотекам, API и механизмам AS3; некоторые другие замечательные примеры — Box2DFlash и платформа Greensock Tweening .

Давайте начнем с рассмотрения того, что делать, если вы открываете zip и сталкиваетесь с необработанными файлами классов:


Каждый файл AS, как вы знаете, содержит класс (хорошо, возможно, он содержит несколько классов или интерфейс, но работать со мной здесь). Вы должны иметь возможность доступа к этим классам из вашего проекта, но вам также нужны классы, чтобы иметь возможность доступа друг к другу, так как многие из них почти наверняка наследуются или состоят из других классов в библиотеке. Это означает, что вы не можете просто взять несколько классов, извлечь их в папку вашего проекта и ожидать, что они будут работать.

Откройте один из файлов и посмотрите на объявление package . Например, в zip minimalcomps в файле /src/com/bit101/components/Accordion.as объявление пакета выглядит так:

1
package com.bit101.components

Видите, как это соответствует структуре папок? /src/ com/bit101/components /Accordion.as . (И класс в файле называется Accordion .)

Это не просто Кит Питерс, опрятный и аккуратный. Когда вы печатаете строку вроде:

1
import com.bit101.components.Accordion;

… Flash ищет файл с именем Accordion.as в структуре папок /com/bit101/components/ . Пакет должен соответствовать структуре папки, чтобы Flash мог найти файл; если вы переместили Accordion.as в другую папку, например /com/bit101/charts/ , и попытались это сделать:

1
import com.bit101.charts.Accordion;

… вы получите сообщение об ошибке:

1
2
5001: The name of package ‘com.bit101.components’ does not reflect the location of this file.
Please change the package definition’s name inside this file, or move the file.

Имеет смысл. Итак, пакет класса сообщает вам, какая папка является корневой папкой библиотеки; это первое слово перед первой точкой в ​​имени пакета — в данном случае com . Это означает, что вы должны переместить папку /com/ и все ее подпапки в основную директорию вашего проекта.


Совет: вы часто обнаруживаете, что корневая папка для библиотеки называется /com/ или /net/ или /org/ , потому что принято использовать ваше доменное имя (в обратном порядке) в качестве структуры пакета. Например, мы http://active.tutsplus.com поэтому, если мы com.tutsplus.active библиотеку, пакет запустится com.tutsplus.active . Если все придерживаются своих собственных доменных имен, то не стоит беспокоиться о том, что кто-то случайно создаст библиотеку с такими же именами пакетов, что и у чужой библиотеки. Однако это не универсальное соглашение ; ни Box2D, ни библиотеки Greensock не используют его.

Основной каталог кода — это термин, который я использую для обозначения папки, в которой Flash ищет ваши файлы AS (и папки, содержащие файлы AS).

Если вы используете Flash Professional, то по умолчанию это будет папка, в которой находится ваш FLA. Однако вы можете изменить это; см. «Быстрый совет» Даниэля Апта « How to Organize Your Flash Project Files для получения дополнительной информации.

Если вы используете другой редактор Flash, тогда эта папка может называться как угодно, но, вероятно, там будет папка /src/ или /source/ или /code/ или что-то подобное, так что вы можете понять это. (Если ничего не помогает, просто создайте новый файл AS и посмотрите, каково место сохранения по умолчанию.)

Попробуйте — скачайте MinimalComps , распакуйте zip и скопируйте нужную папку в основной каталог кода вашего проекта. Затем import com.bit101.components.Accordion; и создайте new Accordion() где-нибудь в вашем проекте. Если вы не видите сообщение об ошибке, значит, вы все сделали правильно!


Что если вы нашли библиотеку настолько полезной, что хотите, чтобы она была доступна по умолчанию для всех ваших проектов, без необходимости копировать и вставлять корневую папку в каталог основного кода каждого нового проекта?

Для этого вы можете использовать глобальные пути к классам . Если вы укажете папку на жестком диске в качестве глобального пути к классам, вы скажете Flash, что вы всегда будете искать классы там, а также в главной директории кода проекта.

Предположим, вы создали каталог C:\FlashLibraries\ (пользователи Mac: вместо этого Macintosh HD / FlashLibraries ) с подкаталогом MinimalComps и скопировали папку /com/ из zip-файла MinimalComps в этот каталог MinimalComps . Файл класса Accordion находится по адресу C:\FlashLibraries\MinimalComps\com\bit101\components\Accordion.as . Затем вы можете установить C:\FlashLibraries\MinimalComps\ в качестве глобального пути к классам, и с этого момента каждый открытый Flash-проект сможет запускаться:

1
import com.bit101.components.Accordion;

… без проблем. А поскольку Flash компилирует только классы, которые фактически используются в вашем проекте, он не будет дополнять ваш SWF библиотеками в вашем глобальном пути к классам, которые вы не используете.

Вы можете даже извлечь все классы корневого кода всех ваших библиотек в один и тот же глобальный C:\FlashLibraries\ к классам, т. C:\FlashLibraries\ Вы можете установить C:\FlashLibraries\ в качестве глобального пути к классам, а затем скопировать папку /com/ из MinimalComps в эту папку. , поэтому класс Accordion будет находиться в C:\FlashLibraries\com\bit101\components\Accordion.as . (Однако, вероятно, это не стоит усилий; если вы C:\FlashLibraries\com\tutsplus\active\ нашу воображаемую библиотеку Activetuts +, она будет находиться в C:\FlashLibraries\com\tutsplus\active\ , что означает, что папка /com/ будет содержать как /bit101/ folder и /tutsplus/ folder. Это не проблема, но она запутывается и может очень затруднить удаление одной библиотеки в дальнейшем.)


Во Flash CS3 нажмите « Редактировать | Предпочтения , затем щелкните категорию ActionScript и выберите « Параметры ActionScript 3.0» . Вы увидите список папок. Нажмите на знак плюс, чтобы добавить новый; Вы можете ввести местоположение или нажать на цель, чтобы перейти к ней.

В более поздних версиях Flash Professional есть немного больше. Нажмите Редактировать | Предпочтения , затем выберите категорию ActionScript и нажмите « Параметры ActionScript 3.0», как и раньше. Форма входа немного отличается:

На этот раз используйте раздел Source path для установки глобальных путей к классам. Используйте знак плюс, чтобы добавить новую запись, и значок папки, чтобы перейти к папке.

Если вы используете другую среду разработки, глобальные настройки пути к классам будут где-то еще. Например, в FlashDevelop выберите « Проект | Свойства , затем вкладка Classpaths и нажмите Edit Global Classpaths ….


Что вы делаете, если разработчик библиотеки выпускает новую версию? Вы можете загрузить его в глобальный путь к классам, переписав предыдущую версию, и начать использовать его в своем последнем проекте. Но затем, если вы откроете один из ваших старых проектов — тот, который использовал предыдущую версию библиотеки — вы столкнетесь с различными проблемами несовместимости.

Вы можете решить эту проблему, имея одну папку для каждой версии библиотеки: C:\FlashLibraries\MinimalComps\v1\ , C:\FlashLibraries\MinimalComps\v2\ , C:\FlashLibraries\MinimalComps\v2.5\ , C:\FlashLibraries\MinimalComps\v3\ , … и так далее. Затем, всякий раз, когда вы открываете проект, вы создаете новый глобальный путь к классам в качестве папки для той версии библиотеки, которая требуется вашему проекту, и удаляете все остальные.

Это работает, но это ужасный рабочий процесс. Вместо этого вы можете установить путь к классу, специфичный для одного проекта.


В Flash Professional CS3 и более поздних версиях после открытия FLA щелкните « Файл | Параметры публикации , затем выберите вкладку « Flash » и нажмите « Параметры» рядом с ActionScript 3.0 . В Flash CS3 диалог выглядит так:

Как и при настройке глобального пути к классам, вы можете использовать кнопку «Плюс», чтобы добавить новую запись, и значок «Цель», чтобы перейти к папке. В более поздних версиях Flash диалог имеет больше:

Не беспокойтесь о других вкладках; просто используйте вкладку Source path, чтобы добавить желаемый путь к классу.

Опять же, разные среды разработки будут хранить эти настройки в разных местах. Чтобы добавить путь к классу проекта в FlashDevelop, выберите « Проект» | Свойства , затем вкладка Classpaths и нажмите Add Classpath ….


Представьте, что вы создаете Flash-игру, которая имеет несколько разные версии для разных игровых порталов и отдельный редактор уровней. Структура вашей папки может выглядеть так:

1
2
3
4
C:\MyAwesomeGame\game_core\
C:\MyAwesomeGame\game_kongregate\
C:\MyAwesomeGame\game_newgrounds\
C:\MyAwesomeGame\levelEditor\

Теперь предположим, что вы хотите использовать MinimalComps во всех версиях вашей игры и в редакторе уровней — не только в любой старой версии MinimalComps, но конкретно в последней версии в каждом проекте. Между тем, у вас есть другой проект, который написан со старой версией MinimalComps, поэтому вы не хотите использовать глобальный путь к классам.

Вы можете создать новую папку внутри вашей основной игровой папки:

1
C:\MyAwesomeGame\libraries\

… и затем скопируйте в нее корневую папку библиотеки, чтобы класс Accordion находился в C:\MyAwesomeGame\libraries\com\bit101\components\Accordion.as .

Теперь вы знаете, что вы можете установить C:\MyAwesomeGame\libraries\ проекта или уровня документа в каждой из разных версий игры и редактор уровней, чтобы указывать на C:\MyAwesomeGame\libraries\ , но что, если вам нужно предоставить общий C:\MyAwesomeGame\libraries\ ко всем играм? файлы с кем-то еще — возможно, всей командой? Им нужно будет либо убедиться, что их структура папок точно соответствует вашей, либо пройти через каждый из проектов и изменить пути к классам, чтобы они соответствовали их компьютеру, каждый раз, когда они получают последнюю версию. Вот это боль!

Вместо этого вы можете использовать относительный путь к классам . Предполагая, что основной каталог кода редактора уровней — /levelEditor/ , тогда, если вы установите ../libraries/ к ../libraries/ он будет выглядеть в правильной папке. Почему? Потому что ../ означает «каталог выше текущего».

Это означает, что вы можете использовать ../libraries/ для всех версий вашей игры, и все они будут указывать на один и тот же каталог. И затем, когда вы делитесь кодом со своими товарищами по команде, вы можете дать им всю папку /MyAwesomeGame/ и она будет содержать все, что им нужно. Вам не нужно забывать об этом — вам не нужно менять пути к классам или копировать каждую новую версию библиотеки в различные папки — и поэтому гораздо меньше шансов сделать простую ошибку. Большой!

(Вы можете пойти еще дальше и поместить весь код, который различные версии игры делят, в папку C:\MyAwesomeGame\shared\ …, но это далеко от темы этой статьи!)

Вы также можете вложить специальный каталог ../ : ../../ идет вверх по двум каталогам вместо одного, и так далее. Вы также можете использовать ./ для ссылки на «текущий каталог».


Как я уже сказал, SWC-файл — это в основном zip-файл, содержащий классы ActionScript и другие подобные данные. Например, в моем руководстве по FlashDevelop я объяснил, как экспортировать ресурсы библиотеки, созданные в Flash Professional, в виде SWC, чтобы их можно было использовать в другом рабочем процессе. То же самое можно сделать с классами, основанными исключительно на коде.

Я не буду объяснять, как создать такой SWC здесь, но я объясню два основных преимущества для разработчиков библиотек:

  1. Вся библиотека (включая графические ресурсы) может содержаться в одном файле.
  2. Содержимое отдельных классов (т.е. файлов AS) не может быть просмотрено или изменено.

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


Flash Professional CS3 имеет некоторые серьезные ограничения в отношении использования библиотек SWC: он не может использовать SWC, которые являются просто набором файлов классов. Если SWC содержит компоненты , вы можете переместить его в каталог /Components/ на жестком диске, а затем (во Flash) перетащить его с панели «Компоненты» в свою библиотеку или сцену. Этот каталог находится в C:\Program Files\Adobe\Adobe Flash CS3\ {language} \Configuration\Components\ по умолчанию в Windows и Macintosh HD / Applications / Adobe Flash CS3 / Configuration / Components по умолчанию в Mac OS X.

Вы можете скопировать компоненты SWC в эквивалентные папки в Flash Professional CS4 +, если хотите получить к ним доступ через панель «Компоненты». Для SWC, которые состоят из классов кода, вы также можете установить их как глобальный путь к классу или документ или путь к классу на уровне проекта.

Чтобы установить глобальный путь к классам, нажмите « Редактировать | Предпочтения , затем выберите категорию ActionScript и нажмите « Параметры ActionScript 3.0», как и раньше. Вы увидите этот диалог:

Добавьте расположение ваших SWC в путь к библиотеке . Как показывает диалог, вы можете поместить несколько SWC в одну папку и просто указать на эту папку.

(Поле Путь к внешней библиотеке можно использовать для указания библиотек SWC, которые должны загружаться во время выполнения, а не при компиляции компонента. Если у вас есть огромное количество кода и ресурсов, совместно используемых вашими проектами, вы можете сократить время загрузки для ваших пользователей, поместив все общие ресурсы в файл SWC и используя его как внешнюю библиотеку, тогда пользователям нужно будет только загрузить его один раз, а затем использовать его в каждом из ваших других проектов. Вы хотите делать с библиотеками, которые вы скачали, хотя!)

Чтобы установить SWC на ​​уровне документа в Flash Pro CS4 и более поздних версиях, после открытия FLA нажмите « Файл» | Параметры публикации , затем выберите вкладку « Flash » и нажмите « Параметры» рядом с ActionScript 3.0 . Перейдите на вкладку « Путь к библиотеке ». Диалог выглядит так:

Вы можете использовать относительные пути здесь, так же, как когда у вас есть отдельные файлы классов.

Различные среды разработки будут по-разному импортировать SWC. Для получения информации об использовании SWC во FlashDevelop см. Мое руководство .

Надеюсь, это поможет! Теперь, когда в учебном пособии написано «скачать эту библиотеку», вы должны точно знать, что делать 🙂 Дайте мне знать, если что-то неясно, и я проясню это для вас.