Итак, вы читали об удивительной библиотеке Flash, движке или API и хотите использовать ее в своем собственном проекте. Вы загружаете его … но это либо какой-то странный файл, который вы не знаете, как использовать (SWC), либо миллион папок файлов AS — ничего, что говорит «двойной щелчок, чтобы установить меня». Какого черта?
Библиотека — это просто набор классов ActionScript, которые были разработаны таким образом, чтобы они не были привязаны к какому-либо одному проекту, и могут использоваться во всем, что вы создаете. Эти файлы классов могут быть объединены в один файл SWC, который похож на zip.
Я буду использовать отличный MinimalComps Кейта Питерса в качестве примера, потому что он доступен как в формате SWC, так и в формате папок. Это же относится и ко всем библиотекам, API и механизмам AS3; некоторые другие замечательные примеры — Box2DFlash и платформа Greensock Tweening .
Давайте начнем с рассмотрения того, что делать, если вы открываете zip и сталкиваетесь с необработанными файлами классов:
Миллион папок файлов AS
Каждый файл 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 файлы
Как я уже сказал, SWC-файл — это в основном zip-файл, содержащий классы ActionScript и другие подобные данные. Например, в моем руководстве по FlashDevelop я объяснил, как экспортировать ресурсы библиотеки, созданные в Flash Professional, в виде SWC, чтобы их можно было использовать в другом рабочем процессе. То же самое можно сделать с классами, основанными исключительно на коде.
Я не буду объяснять, как создать такой SWC здесь, но я объясню два основных преимущества для разработчиков библиотек:
- Вся библиотека (включая графические ресурсы) может содержаться в одном файле.
- Содержимое отдельных классов (т.е. файлов AS) не может быть просмотрено или изменено.
У вас по-прежнему есть возможность использовать библиотеку SWC в одном проекте, во всех ваших проектах или разделить их между несколькими, хотя способы их включения в ваши проекты немного отличаются от тех, которые имеются у вас самих файлов классов.
Использование библиотек 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 см. Мое руководство .
Надеюсь, это поможет! Теперь, когда в учебном пособии написано «скачать эту библиотеку», вы должны точно знать, что делать 🙂 Дайте мне знать, если что-то неясно, и я проясню это для вас.