Cómo utilizar una biblioteca externa en sus proyectos de Flash

Así que has estado leyendo acerca de una impresionante biblioteca, motor o API de Flash, y quieres usarlo en tu propio proyecto. ¿Lo descargas? pero es un archivo extraño que no sabes usar (un SWC) o un millón de carpetas de archivos AS, nada que diga "hacer doble clic para instalarme". Que diablos?

Una biblioteca es solo una colección de clases de ActionScript que ha sido diseñada para que no esté vinculada a ningún proyecto y se pueda usar en cualquier cosa que esté creando. Estos archivos de clase se pueden agrupar en un solo archivo SWC, que es como un archivo zip.

Usaré las excelentes MinimalComps de Keith Peters como ejemplo, porque está disponible tanto en formato SWC como en formato de carpeta. Sin embargo, lo mismo se aplica a todas las bibliotecas, API y motores de AS3; Algunos otros ejemplos excelentes son Box2DFlash y la plataforma de interpolación Greensock..

Comencemos por ver qué hacer si abre el archivo zip y se enfrenta a los archivos de clase sin procesar:


Un millón de carpetas de archivos AS

Como sabe, cada archivo AS contiene una clase (está bien, posiblemente contiene varias clases o una interfaz, pero trabaje conmigo aquí). Debe poder acceder a estas clases desde su proyecto, pero también necesita las clases para poder acceder entre sí, ya que muchas de ellas heredarán o estarán compuestas por otras clases en la biblioteca. Esto significa que no puede simplemente tomar algunas de las clases, extraerlas a la carpeta de su proyecto y esperar que funcionen.

Abra uno de los archivos, y eche un vistazo a la paquete declaración. Por ejemplo, en el zip minimalcomps, en el archivo /src/com/bit101/components/Accordion.as, La declaración del paquete es:

 paquete com.bit101.components

Vea cómo esto corresponde a la estructura de carpetas? / src /com / bit101 / componentes/ Acordeon.as. (Y la clase en el archivo se llama Acordeón.)

No es solo que Keith Peters esté limpio y ordenado. Cuando escribes una línea como:

 import com.bit101.components.Accordion;

? Flash busca un archivo llamado Acordeón.as en la estructura de carpetas / com / bit101 / components /. El paquete debe coincidir con la estructura de la carpeta, de modo que Flash pueda encontrar el archivo; si te mudas Acordeón.as a otra carpeta, como / com / bit101 / charts /, y trató de hacer:

 import com.bit101.charts.Accordion;

? obtendrías un mensaje de error:

 5001: El nombre del paquete 'com.bit101.components' no refleja la ubicación de este archivo. Cambie el nombre de la definición del paquete dentro de este archivo o mueva el archivo.

Tiene sentido. Entonces, el paquete de la clase le dice qué carpeta es la carpeta raíz de la biblioteca; Es la primera palabra antes del primer punto en el nombre del paquete. -- com en este caso. Esto significa que debes mover el / com / carpeta, y todas sus subcarpetas, al directorio de código principal de su proyecto.


¿Qué es el Directorio de Código Principal??

Propina: A menudo encontrará que la carpeta raíz de la biblioteca se llama / com / o /red/ o / org /, porque es una convención común usar su nombre de dominio (a la inversa) como la estructura del paquete. Por ejemplo, estamos http://active.tutsplus.com así que si lanzáramos una biblioteca, el paquete comenzaría com.tutsplus.active. Si todos se adhieren a sus propios nombres de dominio, entonces no hay que preocuparse por que alguien cree accidentalmente una biblioteca con los mismos nombres de paquetes que la biblioteca de otra persona. Sin embargo, esto no es una convención universal; ni Box2D ni las bibliotecas de Greensock lo usan.

El directorio de código principal es el término que utilizo para referirme a la carpeta donde Flash busca sus archivos AS (y las carpetas que contienen archivos AS).

Si está usando Flash Professional, entonces, de manera predeterminada, esta será la carpeta en la que esté su FLA. Sin embargo, puede cambiar esto; ver el consejo rápido de Daniel Apt, Cómo organizar tus archivos de proyecto flash, para más información.

Si está utilizando otro editor de Flash, la carpeta podría llamarse de cualquier manera, pero probablemente habrá una carpeta llamada / src / o /fuente/ o /código/ o algo similar, para que puedas averiguarlo. (Si todo lo demás falla, solo crea un nuevo archivo AS y mira cuál es la ubicación de guardado predeterminada).

Pruébelo: descargue MinimalComps, extraiga el archivo zip y copie la carpeta correcta en el directorio principal del código de su proyecto. Entonces, import com.bit101.components.Accordion; y crea un nuevo acordeón () En algún lugar de tu proyecto. Si no ve un mensaje de error, entonces lo hizo bien!


Classpaths globales

¿Qué sucede si encuentra una biblioteca tan útil que desea que esté disponible para todos sus proyectos de forma predeterminada, sin tener que copiar y pegar la carpeta raíz en el directorio de código principal de cada nuevo proyecto??

Para esto, puedes usar classpaths globales. Si especifica una carpeta en su disco duro como una ruta de clase global, le está diciendo a Flash que siempre busque clases allí, tanto como En el directorio de código principal del proyecto..

Supongamos que creas un directorio C: \ FlashBibliotecas \ (Usuarios de Mac: pensar Macintosh HD / FlashBibliotecas en cambio), con un subdirectorio MinimalComps, y copia el / com / carpeta de la zip MinimalComps a este MinimalComps directorio. El archivo de la clase Accordion estaría en C: \ FlashLibraries \ MinimalComps \ com \ bit101 \ components \ Accordion.as. A continuación, podría establecer C: \ FlashLibraries \ MinimalComps \ como un classpath global, y desde ese momento, cada proyecto de Flash que haya abierto podrá ejecutarse:

 import com.bit101.components.Accordion;

? sin ningún problema. Y como Flash solo compila las clases que realmente se utilizan en su proyecto, no rellenará su SWF con las bibliotecas en su ruta de clase global no hacer utilizar.

Incluso podría extraer todas las clases de código raíz de todas sus bibliotecas a la misma classpath global, es decir, podría establecer C: \ FlashBibliotecas \ como un classpath global, y luego copiar el / com / desde MinimalComps a esta carpeta, por lo que la clase Accordion estaría en C: \ FlashLibraries \ com \ bit101 \ components \ Accordion.as. (Sin embargo, probablemente no valga la pena el esfuerzo; si descargó nuestra biblioteca Activetuts + imaginaria, estaría en C: \ FlashLibraries \ com \ tutsplus \ active \, lo que significa que el / com / carpeta contendría tanto una / bit101 / carpeta y un / tutsplus / carpeta. Eso no es un problema, pero se ensucia y puede hacer que sea muy difícil eliminar una sola biblioteca más adelante.)


Cómo establecer una ruta de clase global

En Flash CS3, haga clic en Editar | Preferencias, luego haga clic en el ActionScript categoría, y seleccione Configuración de ActionScript 3.0. Verás una lista de carpetas. Haga clic en el signo Más para agregar uno nuevo; puede escribir la ubicación o presionar el destino para buscarla.

En versiones posteriores de Flash Professional, hay un poco más. Hacer clic Editar | Preferencias, luego elige el ActionScript categoría y haga clic Configuración de ActionScript 3.0 como antes. El formulario de inscripción es un poco diferente:

Esta vez, usa el Ruta de origen sección para establecer los classpaths globales. Use el signo Más para agregar una nueva entrada y el ícono de carpeta para buscar la carpeta.

Si utiliza un entorno de desarrollo diferente, la configuración de la ruta de clase global estará en otro lugar. Por ejemplo, en FlashDevelop, seleccione Proyecto | Propiedades, entonces el Classpaths y haga clic en Editar Global Classpaths? .


Proyecto o Classpaths de nivel de documento

¿Qué haces si el desarrollador de la biblioteca lanza una nueva versión? Puede descargarlo a una ruta de clase global, sobrescribir la versión anterior y comenzar a usarla en su último proyecto. Pero luego, si abre uno de sus proyectos más antiguos, uno que utilizó la versión anterior de la biblioteca, se encontrará con todo tipo de problemas de incompatibilidad..

Puedes resolver esto teniendo una carpeta para cada versión de la biblioteca: C: \ FlashLibraries \ MinimalComps \ v1 \, C: \ FlashLibraries \ MinimalComps \ v2 \, C: \ FlashLibraries \ MinimalComps \ v2.5 \, C: \ FlashLibraries \ MinimalComps \ v3 \,? y así. Luego, cada vez que abre un proyecto, creará una nueva ruta de clase global como la carpeta para la versión de la biblioteca que su proyecto necesita y eliminará todas las demás..

Eso funciona, pero es un flujo de trabajo horrible. En su lugar, puede establecer una ruta de clase que sea específica para un proyecto.


Cómo configurar un proyecto o Classpath de nivel de documento

En Flash Professional CS3 y versiones posteriores, una vez que haya abierto una FLA, haga clic en Archivo | Configuración de publicación, luego selecciona el Destello y haga clic en Ajustes cerca de ActionScript 3.0. En Flash CS3, el diálogo se ve así:

Al igual que al configurar una ruta de clase global, puede usar el botón Más para agregar una nueva entrada y el icono Destino para buscar una carpeta. En versiones posteriores de Flash, el diálogo tiene más que ver con:

No te preocupes por las otras pestañas; solo usa el Ruta de origen pestaña para agregar su classpath deseado.

Nuevamente, diferentes entornos de desarrollo almacenarán esta configuración en diferentes lugares. Para agregar una ruta de clase del proyecto en FlashDevelop, seleccione Proyecto | Propiedades, entonces el Classpaths y haga clic en Añadir Classpath? .


Caminos relativos

Imagina que estás construyendo un juego Flash que tiene versiones ligeramente diferentes para diferentes portales de juegos y un editor de niveles separado. Su estructura de carpetas podría verse así:

 C: \ MyAwesomeGame \ game_core \ C: \ MyAwesomeGame \ game_kongregate \ C: \ MyAwesomeGame \ game_newgrounds \ C: \ MyAwesomeGame \ levelEditor \

Ahora suponga que desea utilizar MinimalComps en todas las versiones de su juego, y en su editor de niveles, no solo una versión anterior de MinimalComps, sino específicamente la última versión, en cada proyecto. Mientras tanto, tienes otro proyecto que está escrito con una versión antigua de MinimalComps, por lo que no quieres usar una ruta de clase global.

Puedes crear una nueva carpeta dentro de la carpeta de tu juego base:

 C: \ MyAwesomeGame \raries \

? y luego copie la carpeta raíz de la biblioteca directamente a ella, por lo que la clase Accordion estaría en C: \ MyAwesomeGame \raries \ com \ bit101 \ components \ Accordion.as.

Ahora, sabe que puede configurar un proyecto o una ruta de clase a nivel de documento en cada una de las diferentes versiones del juego, y el editor de niveles, para apuntar a C: \ MyAwesomeGame \raries \, pero ¿qué sucede si necesita compartir todos los archivos del juego con otra persona, tal vez todo un equipo? Tendrán que asegurarse de que la estructura de sus carpetas coincida exactamente con la suya, o revisar cada uno de los proyectos y modificar las rutas de clase para que coincidan con su computadora, cada vez que obtengan la última versión. Que dolor!

En su lugar, puede utilizar un ruta de clase relativa. Suponiendo que el directorio de código principal del editor de niveles es / levelEditor /, entonces si establece un classpath de ? / bibliotecas / Se verá en la carpeta correcta. ¿Por qué? Porque ? / significa "el directorio sobre el actual".

Esto significa que puedes usar ? / bibliotecas / para todas las versiones de tu juego, y todas apuntarán al mismo directorio. Y luego, cuando compartes el código con tus compañeros de equipo, puedes darles toda la información. / MyAwesomeGame / carpeta y contendrá todo necesitan. Hay menos cosas para recordar que hacer, no es necesario cambiar las rutas de clase ni copiar cada nueva versión de la biblioteca en las diferentes carpetas, por lo que hay menos posibilidades de cometer un simple error. Genial!

(Podría llevar esto aún más lejos y poner todo el código que comparten las diferentes versiones del juego en la carpeta C: \ MyAwesomeGame \ shared \? ¡Pero eso es alejarse del tema de este artículo!)

Puedes anidar el especial. ? / directorio, también: ? /? / sube dos directorios en lugar de solo uno, y así sucesivamente. También puedes usar ./ para referirse al "directorio actual".


Archivos SWC

Como dije, un archivo SWC es básicamente un archivo zip que contiene clases de ActionScript y otros datos similares. Por ejemplo, en mi guía FlashDevelop, expliqué cómo exportar activos de biblioteca, creados en Flash Professional, como SWC para que puedan usarse en otro flujo de trabajo. Es posible hacer lo mismo con clases puramente basadas en código..

No explicaré cómo crear un SWC de este tipo aquí, pero explicaré los dos beneficios principales para los desarrolladores de bibliotecas:

  1. La biblioteca completa (incluidos los activos gráficos) puede estar contenida en un solo archivo.
  2. El contenido de las clases individuales (es decir, los archivos AS) no se puede ver ni modificar.

Aún tiene la opción de usar la biblioteca SWC en un solo proyecto, en todos sus proyectos, o compartir entre algunos de ellos, aunque los medios para incluirlos en sus proyectos son ligeramente diferentes a cuando tiene los archivos de clase reales..


Usando las bibliotecas de SWC en tus proyectos

Flash Professional CS3 tiene algunas restricciones importantes cuando se trata de usar bibliotecas SWC: no puede usar SWC que son simplemente una colección de archivos de clase. Si el SWC contiene componentes, puedes moverlo a tu / Componentes / directorio en su disco duro, y luego (dentro de Flash) arrástrelo desde el panel Componentes a su biblioteca o escenario. Este directorio está en C: \ Archivos de programa \ Adobe \ Adobe Flash CS3 \idioma\ Configuración \ Componentes \ por defecto en Windows, y Macintosh HD / Aplicaciones / Adobe Flash CS3 / Configuración / Componentes por defecto en Mac OS X.

Puede copiar componentes SWC a las carpetas equivalentes en Flash Professional CS4 + si desea acceder a ellos a través del panel Componentes. Para los SWC que están formados por clases de código, también puede establecerlos como una ruta de clase global o un documento o clase a nivel de proyecto.

Para establecer una ruta de clase global, haga clic en Editar | Preferencias, luego elige el ActionScript categoría y haga clic Configuración de ActionScript 3.0 como antes. Verás este diálogo:

Agregue las ubicaciones de sus SWC al Camino de la biblioteca. Como lo sugiere el cuadro de diálogo, puede colocar varios SWC en la misma carpeta y simplemente apuntar a esa carpeta.

(Los Ruta de la biblioteca externa box se puede usar para especificar las bibliotecas SWC que deben cargarse en tiempo de ejecución, en lugar de cuando se compila el componente. Si tiene enormes cantidades de código y activos compartidos entre sus proyectos, puede reducir el tiempo de carga para sus usuarios al colocar todos los recursos compartidos en un archivo SWC y usarlo como una biblioteca externa; los usuarios solo tendrán que descargarlo una vez y luego podrán usarlo en cada uno de sus otros proyectos. ¡Probablemente esto no es lo que quieres hacer con las bibliotecas que has descargado, sin embargo!)

Para configurar un SWC a nivel de documento en Flash Pro CS4 y superior, una vez que haya abierto un FLA, haga clic en Archivo | Configuración de publicación, luego selecciona el Destello y haga clic en Ajustes cerca de ActionScript 3.0. Cambiar a la Camino de la biblioteca lengüeta. El diálogo se ve así:

Puedes usar rutas relativas aquí, como cuando tienes los archivos de clase individuales.

Los diferentes entornos de desarrollo tendrán diferentes formas de importar SWC. Para obtener información sobre el uso de SWC en FlashDevelop, consulte mi guía.

¡Espero que eso ayude! Ahora, cuando un tutorial dice "descarga esta biblioteca", debes saber exactamente qué hacer :) Avisadme si algo no está claro y te lo aclararé..